复习: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