: n4 V7 q$ u$ Z% S% Wyyyy: 四位数字年 2011 $ Z" D K" s+ syear:全拼的年 twenty eleven" K# j g' S, D! }* J" g
month: 全拼的月 november 中文:11月* i: A" G/ M3 t- T3 V, j) [5 {
mm: 两位数字月 11 9 j: C* I) X0 o+ ?2 Dmon:简拼的月 nov 7 w$ H. |* }- ^+ a$ Ldd:两位数字日: @; J% p/ Q6 ?: `6 T* @8 j/ `, f
day:全拼的星期 tuesday! k( U5 E! \" \" X( |' I
dy: 简拼的星期 tue/ s4 X% R3 ]3 O/ a
am: 上午/下午 am/pm + W- s9 u7 h4 N3 T 4 H) ~" p" @% N* j# M4 d4 Dsqlplus中日期的默认格式是:DD-MON-RR3 c# Z* B4 F N( E2 x
现在的时间是2011年 / K( [/ g" B- r5 d1 o$ @8 [' `; g. x YY RR F6 R# o- d5 j! W
05年 2005 2005 8 y" D# [3 C. h0 ~3 Q98年 2098 1998 " u/ \5 J8 T- c8 A- i D% A+ p6 b8 n
假设现在的时间是1998年 6 o- B8 H) x# ?; g7 P3 D2 C' c$ d4 P+ B05年 1905 2005 7 G% Y) L$ ^! z$ [8 E95年 1995 1995 $ U) h, _9 S$ R/ e, o+ x* W4 s$ m5 q2 c# N; p* {
insert into emp_ning(empno, ename, hiredate) * y$ F$ Q1 U, pvalues(1012, 'amy', sysdate);% a5 G& x& i* V1 S
--实际入职时间是2011-10-10; J) G9 D' l) l, L
insert into emp_ning(empno, ename, hiredate)+ R! r% l& d5 H g$ K+ x z4 `, n
values(1012, 'amy', '10-OCT-11'); $ I7 g( O: M3 |; o L {+ d9 a. p+ D& X4 P
insert into emp_ning(empno, ename, hiredate) # Z% A' }, k3 Evalues(1012, 'amy', % C9 o+ \" R/ ]; v I& m8 ^to_date('2011-10-10','yyyy-mm-dd')); $ S0 Q/ i: Z1 r2 `/ m- P# k" M; y! k9 }" N1 p. _
显示员工姓名和入职时间,显示格式为: 1 p* r8 Q/ ` d, xamy 2011-10-10" }2 O0 g5 ^. t9 h: s7 F5 M
Q. x, e2 b' \, C1 K
to_date4 g# G" Y& `' i4 c2 y
字符串 ---------> 日期- [7 T5 @8 G$ M3 {, S
<--------- k! M5 P. B. w9 G. u6 t8 ^8 q8 m to_char 9 H% j0 m: i( M9 \ 4 r) _9 ~3 G& y5 d3 }3.计算员工入职多少天?: H, y1 n. u( _# K* p
select ename, hiredate, (sysdate - hiredate) days 9 A8 p& }4 h0 ?$ d/ ~3 @0 ofrom emp; ' d0 c& L# Q1 h1 G 0 t4 Z+ p5 s; ?! f1 \日期数据相减,得到两个日期之间的天数差。& L( M4 |( N, [1 A
不足一天用小数表示。 # c: l6 t" E& R, t+ n$ l6 j - {3 L( f2 l0 _. F4 d0 hselect ename, hiredate, $ T& h7 X% v/ \: C1 f
round(sysdate - hiredate) days ) r% B- ^& M( _$ N7 ]' x( p# |from emp; 8 `' d' v6 Z* M( \. o/ e. H, l5 a+ g1 G$ v
4.计算员工入职多少个月?用整数表示。3 [1 [6 f% C f" e3 d; T
select ename, hiredate, ( J* F: y' a# x, ^& `$ N% @& o# C4 Omonths_between(sysdate, hiredate) months / n1 x9 K$ G2 B% t) ^9 wfrom emp_ning;: Y ]' n) N& i2 d
% Y* T! ?4 f% l; Hselect ename, hiredate,) ~8 r L3 Q9 X6 u- b
round(months_between(sysdate, hiredate)) months ; J5 P' C: j# C/ U# {4 K4 E, h" {from emp_ning; 6 L. B; y& V/ D1 A* u7 C$ F( o4 M
f3(f2(f1(p1,p2),p3),p4) : 函数的嵌套 + G" W. [; G- T0 I4 v 3 i# |/ k" o" e5 Q5.计算员工的年终奖金# C+ l: J6 O7 ], k, x8 W
bonus不是null,发bonus的数字。 % T/ J/ }/ ]- x* [2 | X$ Gbonus是null,发salary * 0.5./ X' s# G& n8 e# @! ^$ S8 W6 K* ~) C
salary还是null, 100. # e0 A- u& P+ ~) Z) |% ^ {- E ! v! p( C/ Q, rpublic double calculate(double bonus, 6 \( x! I% W2 i$ g0 j3 {
double salary,+ I+ F" I* s* n; V o% q* x4 a' D
double comm){) \5 U. V: f q( R' m, u* q1 `
if (bonus != null) return bonus;8 V& U! H6 B( P: N4 X# P* S' G
if (salary != null) return salary * 0.5; / g1 `* H9 j! x" ] return comm; R9 e: h7 H3 h: t5 d, F: u
}; i6 X# b& L! a/ B! r! K
--返回参数列表中第一个非空数据3 i3 C1 y( }( |
--最后一个参数通常是常量。 6 j1 c5 q4 t* V0 M9 T/ V7 v5 d$ Wselect ename, bonus, salary, + X4 Z& \; Z! Y. D& N: p+ G( J! S
coalesce(bonus, salary*0.5, 100) bonus, F! H! }" \5 |$ L R
from emp_ning; & {2 E9 d( b- C/ I . v' F3 k: B$ q5 n7 h' x; X; [6.根据员工的职位,计算加薪后的薪水数据: e- v8 f- j# X8 V& z2 r! d
Analyst: 10%! s1 |6 }- v/ [0 t
Programmer: 5% / w4 ]5 h& u5 j( r% n: ? Kclerk: 2% 2 ]& X! ]$ E, C: n, ]0 U7 j其他职位:不变。 . v$ t3 }- ?) ?9 v1 f) V- C5 R h 1 k4 w( a' ^/ v& c) Hcase语句: 5 y! Y. _& U6 I) i) v8 W/ Jselect ename, salary, job,& ^' i4 ?$ I1 k3 R/ K
case job when 'Analyst' then salary * 1.1$ C0 C; s3 {1 B9 L. ~+ [
when 'Programmer' then salary * 1.05 ' P! |0 Y/ V' {8 S) M8 r( h0 i when 'clerk' then salary * 1.02; a4 d7 l) n* S1 t. D
else salary" P6 W! [; A8 d( g6 ^, F/ c
end new_salary/ {& s* j/ s& l
from emp_ning;. n: V& p5 g2 {% H6 w3 f
4 n& Y+ G9 k" A" ~/ ?& t0 o9 Kselect ename, salary, job,+ k7 ` b5 s6 K% |2 B( u
decode(job, 'Analyst', salary * 1.1,( b9 y. s( P; O4 f" r. y# |$ i
'Programmer', salary * 1.05, $ O' Q# c7 x& T- P! |) a 'clerk', salary * 1.02, ) e* d/ w: r1 w, I% r; R salary) new_salary0 L/ ~8 {2 A. m+ V/ `" l' c
from emp_ning; 0 } z+ O/ N8 y; t4 X' M& }" p, n6 M! P- _. O
7.薪水由低到高排序' R# M5 ]( {9 h
select ename, salary from emp_ning$ P8 P4 W* F/ |3 z( X% E
order by salary;- D; v3 t2 h" A$ P2 h. x
) m7 f% R B: O h
select ename, salary from emp_ning6 N/ q$ f2 c7 t" B
order by salary desc; --倒序排列 descend H, ~$ P2 a* s: M0 U3 L4 P* P 7 u( I+ L& t" ]2 ~* p! sdesc emp_ning; --查看表结构 describe 1 c, a, c$ H, N7 y9 U$ E1 y ) ?& q( F# N) n+ ~/ R4 J8.按入职时间排序,入职时间越早排在前面。3 s3 E& K0 U$ t J
select ename, hiredate6 i% P- n3 n* C5 x
from emp_ning8 ^ q+ \. E$ Y& L. x) N
order by hiredate;2 v9 O1 O- ^9 w0 V' x+ m
) z L. y( R1 J- m
9.按部门排序,同一部门按薪水由高到低排序, b7 U5 r5 m5 m- I3 j2 L$ g
select ename, deptno, salary @4 ?1 I0 o. _8 \1 ?& B4 p" } Ofrom emp_ning. u) I+ ]8 d g w! Z
order by deptno, salary desc;3 x5 b' Z5 _% F/ P; h
6 Q/ X! L0 S7 Y7 {10.员工表中有多少条记录?. V" A |% E w% z
select count(*) from emp_ning;6 m* u! I) j7 r3 A
6 Y( z+ L+ m ]" d; Q, U
openlab帐户下有多少个表?! s8 \% I T8 ^; \* A
select count(*) from user_tables;& [- E% W- R* Q9 Y% S* K+ z4 o
: `" ]7 L& \/ L S, _" m9 bopenlab帐户下有多少个名字中包含emp的表? + r: H8 z! y3 v5 G7 y. I# ^* ]select count(*) from user_tables, U1 G' ^1 c' |% b6 Y
where table_name like '%emp%'; 7 K4 y5 y; |7 r) ]' T$ e* Z, J6 Q) s! W4 n- h
--表名默认大写0 _0 v2 z) F, j$ t/ [5 ?2 e; m
select count(*) from user_tables 3 F' Y u; E( k% A* rwhere table_name like '%EMP%'; 8 l& e9 ]4 H2 u* [3 I( H4 @; Y2 U5 I+ {
--入职时间不是null的数据总数。 8 @, q- S. g/ ~. u+ Y {--count函数忽略空值。 / `5 \% r3 z eselect count(hiredate) from emp_ning; ) A8 S! x3 e% ?& g" o, t; L7 x. B2 z1 U" g+ V
11.计算员工的平均薪水和薪水总和是多少? : P0 S0 Q' i4 S. s0 iselect avg(salary) avg_sal, ) M; {& ?8 D. c3 Y- D- u7 M4 `$ Z
sum(salary) sum_sal! b/ p% k7 F* z& M
from emp_ning; 1 v: m5 t( V/ a- p2 q0 {4 N: |8 v ! c. y" \0 J* ]$ w1 ]7 lavg(salary) = sum(salary) / count(salary) ) g, W6 v5 @$ K; H. C9 p! d 68500 / 10 = 68502 @# H! G( K) Y/ N
--纠正逻辑上的错误) \! ], s1 Y1 t9 R5 x% A
select sum(salary)/count(*) avg_sal, 0 i' F$ \. {* d; n v
sum(salary) sum_sal' |6 g" ~! v7 i5 b V
from emp_ning; $ ]- o8 r: _/ M* W# S! a# q # l8 Z( H% ~% i ~select avg(nvl(salary,0)) avg_sal, : K% P/ f& I5 c6 U0 y sum(salary) sum_sal 8 W3 M2 @4 S1 {- ofrom emp_ning; * }( q: X) I& N . u+ b) a9 X7 a7 u; p" F8 J# |12.计算员工的最高薪水和最低薪水( i8 H3 t# i! R F' ^: j, n% U
select max(salary) max_sal,4 [6 o# X& J& t! y! D
min(salary) min_sal4 [9 Q% A/ }4 B3 w" v' Z) e0 t
from emp_ning;0 a, g. l# B9 I" r1 [8 l [
8 r" L8 c7 r$ G" d! Q
组函数:count / avg / sum / max / min 忽略空值* p" z4 R, j. b) A/ O/ j8 `
其中:avg / sum 针对数字的操作。 2 b- ]5 b" B" q! H* M" h$ A max / min 对所有数据类型都可以操作。+ G9 ^5 q$ K, Y% I$ v. y9 o