; M! p5 D' Y* Q1 fset linesize 1507 J' [6 n) n/ \6 |
col empno for 9999& R% D+ ], J. v* t$ \! m, x
col mgr for 9999 + G. ~" }- b8 ^: a8 S6 t- S! [+ \col deptno for 99 8 n6 V2 V4 `" t5 U+ h4 @3 `col salary for 99999.99, u! i+ u$ S, g9 M3 Z: B7 [
3 w# e! A% d( e1 x: d
select * from dept_ning;* b( g. w2 h1 v
select * from emp_ning; % E8 `) n) m8 `- P; b* M6 m9 V7 H) `- n9 b# x: x2 m3 o! f8 S6 y8 p
一、学习查询语句。5 T+ Z8 }+ U) Y8 j: ~- V
1. 计算员工的名字、月薪和年薪? 3 j9 G* P( K9 R# k; o: R4 @" ~0 K' l' oselect ename, salary, 5 }5 M" N& V2 A' ]; W$ F$ d/ Rsalary * 12 year_sal 7 P3 R9 O9 U8 a$ K. C$ Qfrom emp_ning; $ L0 M' q5 i; Y: z) j; r- w* y7 S / a! G' x0 ^2 t# `- W p7 ?2.计算员工的月收入?$ r6 D* c1 h, d: }4 {& P
空值和任何数据做算数运算,结果为空(null) . t) e# V0 J( \1 h, ?5 m# Rselect ename, salary, bonus,7 U: h2 k) c2 b, D; Q0 r1 w
salary + bonus month_sal " ^: }% R+ [! S: C6 _. Afrom emp_ning;" P7 g4 d& m+ I4 U& Q
, m* h6 Z% w, m2 u/ ]" b9 Nselect ename, salary, bonus, 5 \4 Z. w4 o+ I8 Z% B* Y0 w salary + nvl(bonus, 0) month_sal & x7 D+ E& V- n/ j( Kfrom emp_ning; 8 X$ d/ b! {1 P1 l v C ; G g" {; m x7 ~' ~5 p+ \public double nvl(double d1, double d2){# d! h3 t" F. h% b3 I
if (d1 != null)7 U8 j* ~/ y2 ?5 u6 T7 Y
return d1;( T T+ L$ P# F5 Y3 ~. ~
else ) a( A; V7 l: ^( o' `- ~# j
return d2; , L8 l9 Y' P% | F7 o; f9 i* b
}$ B& a+ ~% A" I6 V5 I
public String nvl(String s1,String s2) 8 J3 _: A. v% q% S" ]9 ^, V{ ( i! ]( o# B' }9 H4 W" W7 y( z if (s1 != null) ; }9 Y3 d3 Z/ R1 }' B return s1; f: g' s% q. o$ J* z0 T else % @4 t" \3 J: F' {; x return s2; , ?9 L& m* U" h% ^4 c8 P# Q& d}+ s6 m! o/ _9 E
public Date nvl(Date d1, Date d2){' G' M. [' w" ?, g, z6 [
return (d1 != null) ? d1 : d2; 6 a' G \$ U$ f$ W} ; m: q o+ E5 J5 k5 ?" }" ]8 e% b2 [: u% O% G& y
insert into emp_ning 3 _0 u( U8 ^3 H; b2 Q& \values(1011,'余泽成',null, null, null,% g7 a3 U4 k7 o0 n9 V! n' w8 G# y
null, null, null);: L! h/ `! [( K1 Q
简写为: / ]% D$ _' O6 a9 ~5 }8 I& T* ^" A( Tinsert into emp_ning(empno, ename) 7 T+ L' [* q' i& G( C7 S7 zvalues(1011,'余泽成');; u- S- Q4 g9 v' Y
# k/ n( j& ?8 M9 P" c1 U5 i1 U
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。 ! O/ h; R. e2 g0 rselect ename, nvl(job,'no position') # y- {" _+ K7 u _- ^" Efrom emp_ning; - |- M: h# ~. U( S! g J# ^+ ~7 C$ x, F' F3 h& s( r- ~7 X0 n0 h; y
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。' G5 d3 a1 L6 j: x# H# J
select ename, nvl(hiredate, '10-OCT-11') from emp_ning; : w8 Q8 V/ I9 I" b: B0 j/ O/ O% a% m" s. w
nvl(bonus, 0) 8 r, H- j% v4 x4 Cnvl(job, 'no position') & Q% t& Y# W2 w0 l9 x/ N6 {+ p$ znvl(hiredate, '10-OCT-11') 4 s, _; @* T: {8 r5 y, o- W$ w3 ~- X. a6 f9 o: P4 Y1 A& c: F
--复制表emp_YYY为emp_XXX + n' O x. d' C# k }% h7 \# mcreate table emp_XXX 4 ^: D8 U: i% Bas+ [3 D$ n# I3 r u7 M$ z+ u
select * from emp_YYY; . u+ j" K, d* u 6 q- i' n* K: e" G; m% p! b3. 机构中有多少种职位? 8 w7 N4 `* J9 i2 tselect distinct job from emp_ning;7 l9 M6 @* S* [
% c; j( W/ j! O
员工分布在哪些部门? 1 N" Q2 M- m- W, Y5 B% ]9 @3 M! c; Hselect distinct deptno from emp_ning; ' F- B$ E+ [4 N: `; a ) v8 a5 y9 r1 z; K7 C+ P2 _1 vdistinct必须/只能跟在select后边。- u" q6 b0 G( h J0 r( s8 t
- }& p! L' ?+ f
4.薪水高于10000元的员工数据?! f4 m' {& F0 S# E; ^& A
select * from emp_ning. H" M8 S2 ?0 m5 M2 L8 ^4 d
where salary > 10000; 8 J5 K# W: C$ h8 {' a9 ?; Y @# W) v/ t+ K5 w3 \
5.职位是Analyst的员工数据? , O$ a2 z) X; Wselect * from emp_ning- Z$ ?9 L4 M+ |) H7 x' f
where job = 'Analyst';) D0 o$ ~7 ^5 F5 R. Q" |. U
% L: m2 V% k0 H; u: y4 Vanalyst ANALYST anaLyst 6 @8 |9 o z% Y! b) I% P# m) }' Y/ d3 s- E" D$ ]) n
select * from emp_ning" _$ } K' V* M( ?
where lower(job) = 'analyst';+ t( B3 U& j6 a+ _- c! d! {
+ f, Q% }; u* o, ~; B
select * from emp_ning$ B. C2 k1 D$ W
where upper(job) = 'ANALYST';! h2 `2 D. K3 r& |. R& A3 _
9 q% C% `5 {% h7 {/ g+ F--如果数据是analyst,查不出结果 / I( ?0 ~* f$ L- z1 ]% W& J9 Q/ e1 E--SQL语句大小写不敏感,数据大小写敏感 * k3 }' `2 n2 P/ C+ b3 U6 I6 w6 b( G8 T- H- X" o0 }
6.薪水大于5000并且小于10000的员工数据 : K8 j( ]& b3 C! R" W1 k7 B* F?8 c' C7 y& v% J- ~, W# p
select * from emp_ning- e+ J6 C7 m' r! o( x0 H- Z* E
where salary >= 5000 " v- v0 o& [+ ^) Tand salary <= 10000; / j! U+ }; i" d4 X; F 3 n+ P1 k4 L$ E1 K0 N--在区间中:between 低值 and 高值 2 d6 @* J# `9 r7 K( y--闭区间:[低值,高值] ' h+ M& i; v/ eselect * from emp_ning / a8 z- C N) Y; [( Awhere salary between 5000 and 10000; ) w# \ |8 t, c4 o+ \, @ r4 j$ H% o7 A/ m
入职时间在2011年的员工? ( A/ {! ~( G' P3 K7 E, M2 `['01-JAN-11','31-DEC-11'] ) ^) b1 T% m8 O- qselect * from emp_ning, v) k7 K2 k4 I. a3 d) w* }
where hiredate between '01-JAN-11' 6 @& u0 x0 p/ I, ]and '31-DEC-11'; 4 X! U, u4 A- v6 ~7 c! T& ^$ ~3 N3 Y2 @5 u4 A5 _% w6 w
7.列出职位是Manager或者Analyst的员工- E$ r. i# f0 Y" S9 @) x h
?. r; i& Q; f6 `3 m
select * from emp_ning 4 x5 ]5 m$ C3 Q+ `) V. u4 N) K5 G$ Twhere job = 'Manager'8 ~; l' y' o( S2 @: q8 p# c5 D4 j
or job = 'Analyst'; 3 Y9 _: e' D# f--等价:in (list),在列表中。1 ?) B, Y6 n& H% g
select * from emp_ning6 f q3 v# I. e
where job in ('Manager','Analyst');0 r. k- k+ Y1 q2 Q/ M& b. {" s% G
) F; J* W" f3 u/ a; w3 x5 P
8.列出职位中有sales字符的员工数据?4 K7 `9 R) z7 C) v# _
salesman" Q w) a K; x9 P# }
sales/ t* L9 e' ` k+ u7 @5 g0 I& H, j. r
before sales( K |3 t" Q2 b6 R/ N* t% S7 @) v) B
after sales & @" N8 Y q h6 A, j% [before sales engineer 1 u3 _1 N9 s% ?2 M6 |3 @6 x& A4 {" w) t( S) {' m
--%: 0到多个字符,跟like配合,模糊匹配 6 R3 i& c. z* \% U: k- x+ p( tselect * from emp_ning 6 h& e/ ^: O2 H" x3 Owhere job like '%sales%'; 8 ^6 o7 Y( D) T5 b. `* Q( D7 S3 T/ Q: `
9.查询哪些员工没有奖金?3 b; Q; {: S. Q) r6 W* c! f1 y
select * from emp_ning, N6 _$ d+ z: u) Q* X; h
where bonus is null;7 ^7 e; }/ [! \, O
/ ~6 n3 V& [/ r$ L7 b4 r哪些员工有奖金?0 o) S+ l2 R% S U, E9 M3 Z
select * from emp_ning5 @8 F' D i% S5 h3 y
where bonus is not null;& P$ L0 u; k" T$ k4 X# _4 O
( P# ~- M! k) V6 p小结:2 k' J2 {2 |7 w+ c- M# y
1)create table ...' _+ |0 ` N" f$ m) K& V% K+ ?2 ^: z4 f
drop table 表名; ! V& s2 Z$ z* z' p: Y+ W2)insert into 表名 values(...); ( d4 Q0 H5 H- W8 g3)select distinct | * | 列名 | 算数表达式 | 别名 4 @" B7 F2 F+ B0 j from 表名; c6 z6 A6 f2 x1 `
where 条件1 or 条件2 and 条件3; 9 c! Y( ~6 Z* }- H) M6 e4 U 3 I" c3 A( m" A8 X2 v& T# w> >= < <= between...and... in like+ c& E) G# q6 }: ]0 ?# L+ t, a
4 O, p N0 Q+ m! R% ~9 ^) s