科帮网

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

动态微博

查看: 1929|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:9 o/ Z! P' m  V5 ^; y1 v
1.查询语句的基本格式。
$ G" s$ t3 X! sselect ...
5 g* V% Z: j0 `9 L# Bfrom 表名
1 ~& |7 V" q0 F. k' jwhere 条件% _* V" P( R1 A$ E
group by 列名  d- y& m& Y! k( s% u! P9 J) \. H
having 带组函数的条件! U' V$ }( }; f7 R
order by 列名: Z" f0 J- s4 V

) U! ?% {8 d! J$ M! q2.函数+ X3 M5 y/ B8 S% q
1)组函数:count / avg / sum / max / min
' F3 m' F7 n+ |- t1 l; U8 y$ Q0 C" r. b% o
2)单行函数:' w( B; o6 `) g$ B
a.字符函数:upper / lower / initcap" `) h+ O) Y) A) D! w* A& @$ c
          length / lpad / rpad
5 r- U4 K0 |5 S8 G) h8 _
! F2 z* D# u" @3 d) b3 B5 [          l : left ; r: right
$ ^! z# M# u+ d+ [; ^
! h" b6 ?( t' Rselect rpad(ename, 10, '*') from emp_ning;' M* r6 K' C( }2 B7 l/ @/ d4 G

; y; m1 O, t- g* h) s( ~b.数字函数: round / trunc / mod
1 P5 ?: D* s( R! Cselect mod(salary, 1000) from emp_ning;
# I+ L* r8 ~2 C4 V) _1 s3 a' Q
' O1 g# q& K0 L1 R9 Fc.日期函数: months_between / add_months /
! `* l8 H  W/ ]             last_day(sysdate); o( ]+ D! B8 j6 @) H* h
0 }  ?( }& |4 A9 _, }
d.转换函数: to_char / to_date / to_number# P) S2 A4 L5 N3 r! Y/ T0 J) H

1 E9 O' g- p8 C" h: C  m              to_char         to_number: \7 l4 T/ k+ n3 `
       日期  --------->  字符 ---------->数字0 z( p% M/ W$ ]( `% B$ z
             <---------       <---------
2 i& b  x6 C% z, Z" o             to_date           to_char3 E+ c5 h# O: e, m5 j
. A4 M; E# U+ m1 {/ Y* p
* t8 |6 f- |1 `% h7 H3 {4 M
where password = '1234' and id = '1001'1 K( N/ q# n/ b/ Q( r
3 x' G) B% ?! _1 W/ b
select to_number('$7,912,345.67','$9,999,999.99')
+ h  K/ k0 S/ ^; a! D from dual;6 G2 ^0 K- P, E7 b' ~. h
" q- z8 p. T3 Q2 }# Y' y
7912345.67, t( }& Q  C/ j, [9 K; I$ _7 I) i  x+ u

7 J5 z% J% v" d9 gselect to_char(7912345.67, '$9,999,999.99')0 o% i. s3 f! e0 c, K
from dual;
" Q4 G& M) i1 F: n9 Y, A# H, N2 g4 b  J2 y8 A0 @7 f1 {) z
$7,912,345.67
& r) q/ n6 V/ f4 [0 r6 N6 B3 c- k* D
e.通用函数:nvl / coalesce / decode& N, [" j! T: ]! g  }8 y: m3 I

" E$ Z( |$ A3 b" C使用频率比较高的单行函数:) ]8 d" }/ J; U$ }% M
upper / round / to_char / to_date / nvl
* u) C5 e! j  D* E3 u, d2 w
- x9 a! A9 X) |$ B# C) |7 H4 _" b
9 Z. A- l2 N4 T% B9 Z一、子查询
( u4 B* h- x7 G0 w. Y( a1.谁的薪水比张无忌高?9 z! ?* R; l8 ?7 v) z
子查询% Z+ i! I, ^; x$ c/ C
select salary from emp_ning
& E) D7 [# h) x. j3 Twhere ename = '张无忌';' F  k+ x! h; @/ Z

3 l7 ]/ G$ a( F+ x10000
( u' E& M/ @1 q& h# ]
6 m$ G9 K+ r8 o4 y( i; Z; c主查询
" D: i# c  y" }4 Vselect ename from emp_ning) B! U) Z  |- e( U2 F0 e# h, y
where salary > 10000;# O' P/ T/ q" q3 r. V0 o

# H- {; k1 c/ A4 K9 I+ V7 F" S# S张三丰. _3 E5 F* a; ]3 U9 R
6 h. }8 F* ~" F
合并到一条SQL语句:- P1 p, g5 C1 z# @9 G
select ename from emp_ning
" P4 @, W; a9 j& s1 \7 ?6 jwhere salary > (select salary from emp_ning
, R7 ~" H+ x& ]/ Z1 C2 ^, K: s                where ename = '张无忌');
! F, T  z/ w$ T( J& F% V
) Y6 t) @, w& @>  <  >=  <=  =  <>: 单行比较运算符,
! ]  z9 E% Q" G& C只能和一个数字比较。  S3 Y+ L! u9 ?. d- l; k' X

0 c8 {0 K/ f$ ]) ]: u, e5 j2 o% ninsert into emp_ning(empno, ename, salary)9 k( A: n) L$ c  R; B: c# e% C
values(1014, '张无忌', 8000);- x+ l# L) C( f, n. w
  {: _% Q& S( b3 ?
谁的薪水比所有叫张无忌的人的薪水都高?大于最大
3 F. J& @: H9 x1 x8 t, `9 x% P! H10000
1 B- X8 M2 y- O: P$ i- G8000
1 z/ }7 @- L* J7 R$ W
' m. i1 w& ~" V! ?/ d5 S/ e: bselect ename from emp_ning7 O) T: L: z7 Q# g! |  {, x
where salary > ALL(select salary from emp_ning
; U( N3 c3 Y+ D: {                where ename = '张无忌');3 q1 D; d. \# ?  k% n

2 w$ s; E) L# P4 l( c哪些人的薪水比任何一个叫张无忌的人高都行?大于最小
( \1 D5 r( T, j: y+ \3 i4 v7 \10000
% O* S/ G4 B/ j8000
$ V  L* F; v6 N/ h0 Y
' R1 ?3 l7 W9 L( a9 {! V! p6 Vselect ename from emp_ning4 D' q5 @" g& H1 C, E8 Y
where salary > ANY(select salary from emp_ning9 D$ K3 d, B1 h( ]9 c2 a# X
                where ename = '张无忌');5 h2 j8 ^" D3 o) Q+ C. W
  j5 s* `" d" a
2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。
8 l/ j2 D% l. p& Sselect deptno from emp_ning& W9 ~6 N8 ~8 b* f1 Y
where ename = '刘苍松';7 f$ n1 b' N# V6 w2 s2 I5 p! t
10
4 D3 p! R2 C$ ^: Y8 r4 r4 M6 [' Y8 D/ U+ q$ _
select ename from emp_ning! U, j9 L9 m, H
where deptno = 10
. J# B' x$ J( Z2 e% B8 F# g3 Wand ename <> '刘苍松';  @8 d' T1 v% B4 T  T1 }1 R

1 V( w8 C. ^3 Lselect ename,salary,job ) O9 I2 `( ?% x( [5 f$ h7 @
from emp_ning5 \8 O- n4 s: Q0 ]6 I
where deptno = (select deptno from emp_ning$ w( J6 @  T7 z
                where ename = '刘苍松'): P( \/ l  I4 B. W$ m' B4 R
and ename <> '刘苍松';
& N" h: n7 W1 |2 A8 L8 u7 A
2 [3 z& ]( C& m" d  W7 P# J8 T! i, E--如果子查询得到的结果是多个,不能使用单行比较运算符) N$ B! x0 P$ g4 N! ^
等号。改为:in9 R: }" B+ P2 I! K2 n2 ~$ ~
insert into emp_ning(empno, ename, deptno)% j: c& Z/ _: \. S' J: r( F
values(1015, '刘苍松', 20);2 y- g: E+ e9 k# @
: [# t! n0 W* S# r0 j  e2 H# B/ O
select ename,salary,job,deptno
: i8 ?# f: f9 L( O: @4 {) l; b' ]from emp_ning
  A2 }! @6 X% I  _+ h- k" d9 nwhere deptno in (select deptno from emp_ning0 R. C" X8 E+ n2 I& x! F" T4 \( ~) }
                where ename = '刘苍松')% n3 a- h1 m) c; i* H  y  I
and ename <> '刘苍松';
% ^/ n5 p) H& m4 q& K
/ T+ f" r  I3 v* V" _根据子查询返回的结果的行数:
! X( _$ J4 w1 K% U返回一行:> < >= <= = <>0 |7 E# n( B9 a* S
返回多行:>ALL >ANY <ALL <ANY in
2 }& E% m6 T( x. z4 ^
5 Q8 F* A/ V% X9 L- L5 Y$ @3.每个部门拿最高薪水的是谁?
& C( f) Y; f8 c9 f--返回多行
  ~% J/ C/ j+ r0 t) P5 Z: dselect deptno, max(salary)6 v3 O8 ?% I. `* c6 N3 g
from emp_ning1 @, }$ F6 i4 d$ @
where deptno is not null
' I8 t" n  J" v" o" zgroup by deptno;5 y. n+ W- ]+ M0 q1 P8 }6 \1 _
1 d; \$ l' w, E$ Q+ g6 |) U
   30        5000
+ ]/ c6 S- e/ S   20       15000
* A. ~+ t. ^) T   10       10000
' p) V& H# [0 ?( z5 j# P' x$ z
# U6 ?; _% X4 m3 O: \. Sselect ename, salary, job, deptno
8 W# k- R- H% @( K) T+ Dfrom emp_ning
$ `$ C- ?' K/ Q6 C/ b6 [& u* T% \, twhere (deptno, salary)
: C* F* x$ d2 \0 Z4 \      in (select deptno, max(salary)) e) b$ b! o3 q8 G; [- C
          from emp_ning# @1 Z0 V9 m, ^7 G
          where deptno is not null8 K9 C* @3 S' ?; n8 z  H2 f; e
          group by deptno);
0 r' U/ o1 [$ {. s: V* u- a
/ g# g& g- R8 f4.哪个部门的人数比部门30的人数多?
5 d+ E5 q& Q* w' Iselect count(*) from emp_ning
& e5 N5 U  i- ^0 s8 [where deptno = 30;
* i! a9 ^; {! o0 t" h& x, |' C3
3 w8 a, a% T: Y! D' x6 u/ T- U" _' P$ {! H' b
select deptno, count(*)" \# o; C# D  M
from emp_ning7 m! l" ?+ L6 b9 I$ i
group by deptno: `& C- Z  `9 ^4 H- a2 G# k
having count(*) > (select count(*) from emp_ning% f  C" K* g& n  L( F& e% E
                   where deptno = 30);
3 ^9 p  F  y" @% Z' u; n6 z* {  n$ g1 B9 \2 z
5.哪个部门的平均薪水比部门20的平均薪水高?# d& X. P: l: X
select deptno, avg(nvl(salary,0)) avg_s% ^$ N5 O5 U. h
from emp_ning
4 q9 X$ L" p5 _5 J2 kgroup by deptno' |7 @+ S9 Z5 ?9 M5 i# r" w
having avg(nvl(salary,0)) >% h/ b  V( r: i$ x( z
       (select avg(nvl(salary,0))
8 X% T; [' h; Z- n! O' n        from emp_ning; d7 F6 T* g" R$ Y! y3 D
        where deptno = 20);7 i0 W$ `& o* \9 N

- H) ~3 L# G2 x3 r2 ~6.列出员工名字和职位,这些员工所在的部门平均薪水/ J5 e8 F4 F( m- y
大于5000元。
6 f; C+ M5 Y- ]% C6 v, Hselect deptno, avg(nvl(salary,0))
9 h" z) }' Z9 Ofrom emp_ning& P4 A- D  N. n1 p& j0 N
group by deptno/ U' L' d+ k! o, n$ w% D# V2 @7 M
having avg(nvl(salary,0)) > 5000;
- l% F" z' d( v$ X( m10  5750' G$ o! |$ C7 x; G6 A  A
20  8000 8 F/ J7 u  @% Z( z2 {

: G- N* \' r+ Pselect ename, job
/ |! B' H6 T2 Ifrom emp_ning
; w( w) G" ~0 s5 K$ d( B' qwhere deptno in (select deptno8 z, M. z4 c, T
                from emp_ning
( o" }) S9 {/ c( Z3 H% q2 `0 B; b3 G                group by deptno: Y6 W$ H) T; S% G
                having avg(nvl(salary,0)) > 5000);/ P# Q- W7 {+ N% M% _

8 N: v/ X* v. g1 i& k  g7.谁是张无忌的下属?1 E( W1 n6 s2 U& z' y! T9 A* l8 b
select empno from emp_ning
; K+ n. O% E* B6 H: a- n- r% Kwhere ename = '张无忌';4 v2 k7 c$ m* X0 T% j. i7 i
1001
& V# L' [, z8 X  n) m4 H9 Y1014
8 R# Q) ]; P( w: R
% y. t  A' h' X# Lselect ename from emp_ning
5 d7 N# [/ u$ q% Lwhere mgr in (1001, 1014);
# c( Q6 q! o- s0 ~, d) E* D$ [5 |& H. L4 @) e
select ename from emp_ning4 C8 M7 g& _1 {2 ^
where mgr in (select empno from emp_ning) r% E& ^/ V4 |0 `6 k
              where ename = '张无忌');
4 M. Q6 e4 @3 ]3 Q* t
$ R/ }! B" b: C# z9 _8.研发部有哪些职位?1 b* u* A) {# `% W7 e5 d
select distinct job from emp_ning
1 L5 h) z4 d2 @$ w; Ywhere deptno = (select deptno6 b: W% v& N7 r' d
                from dept_ning
. M, C- j3 Q' A4 |                where dname = '研发部');8 r  Z0 p# v4 k1 r

, J& R  S! I- y% z+ v. [8 c/ c+ d8 \( C% n. p6 h7 {

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


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

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

   

关闭

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

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