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

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

动态微博

查看: 1716|回复: 0

Oracle增删查改 day04

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:42:13 |只看该作者 |倒序浏览
1.内连接( C# Z* K0 ]/ ]  D2 g4 S

4 b( A( |0 `  u/ O* A0 \% ut1 join t2 on 条件% Q* O8 D! O; v6 D4 T# G1 p' i

0 E. L( ?/ X# c. v. l' W5 g1.1.等值连接:如果on后面的条件是等于。  E! j. a! ]* C  d
t1 join t2 on t1.deptno = t2.deptno
7 {; p" d: t2 u" U2 T/ r) Q1.1.1.等值连接的一种形式:自连接
) }  T7 g, R- ~! a# vt1 join t2 on t1.mgr = t2.empno6 q9 e6 J+ S4 ^1 p! J- `/ [

2 D1 b9 C4 i* L4 a+ u6 e1.2.非等值连接:on后面的条件不是等值操作) E7 @$ Q+ z/ ^5 T/ g% X$ {6 i
empno ename salary         grade lowsal hisal' |. ?, ~& T# E7 T( c" k
------------------         -------------------/ Z9 }' Z6 [5 D' Q" I1 b8 i4 N
1001 zhangwj 10000          1    10001  99999
: j4 F. P3 @; X  a' l% U1002 liucs   8000           2    8001   10000  
1 o2 c5 T* j. n4 Z8 E" m5 G- o$ P1003 liyi    9000           3    6001   8000
& B: u3 ^% Y8 Q$ S9 Q8 @* w8 x1004 guofr   5000           4    4001   6000$ i, O& `. i. z) R1 i
                            5    1      4000
6 R# n6 o; S8 [' y--步骤:1.建表;2.插入数据(commit);3.查询# f& Z* ]! ]9 P3 p: `# I
create table salgrade_ning(
& [: J' O2 ?$ r+ X$ N2 {6 O" Hgrade number(2),) _1 F. }. E5 V2 M. L3 F% y3 j8 t. G
lowsal number(7,2),
- t+ f9 I% O) e) W. Whisal number(7,2)
& b) h  y) [2 F" W7 Y);
4 c  m) ^! z1 D5 Cinsert into salgrade_ning values(1,10001,99999);9 Z2 D1 W' g; t% x7 Q
insert into salgrade_ning values(2,8001,10000);2 u6 A) a1 I+ U
insert into salgrade_ning values(3,6001,8000);
/ ^8 e# n0 q( Q) z3 |  ainsert into salgrade_ning values(4,4001,6000);5 b' \8 I' j0 d# n
insert into salgrade_ning values(5,1,4000);% w4 {0 t6 Y. z! H) F. ^/ y, T
commit;
. o% w8 R' @$ ^$ a  |8 Q8 c6 e--计算员工的薪水等级:
6 r0 e& G$ E3 |7 V3 ?& Uselect e.empno, e.ename, e.salary, s.grade
  D) P$ ~$ J7 ^, f, M$ Z4 ^. [from emp_ning e join salgrade_ning s
2 o* J8 ^0 u2 u( E: f) j1 lon e.salary between s.lowsal and s.hisal;
' K& X+ R/ p7 c, m, o--最终查询结果的形式:
' {1 ^% j! v) p/ Y* S6 A7 F' ?# q8 I1001  zhangwuj 10000 2
/ C0 P" V8 ^; U) N7 v8 K1 j1002  liucs    8000  3  ( [/ E  n/ t- Z: m: {; K; `  j
$ ^- T  L1 j% m1 @$ f1 e
2.外连接* M9 h8 c: k; `% J( V$ z
t1 left | right | full outer join t2 on 条件5 ~& O3 `4 v/ X( Y; O2 f  \

# [( Z, @7 C) G6 B5 b: o1 Z! iSQL语句的种类:
, K8 s( W& S8 T/ m/ {DQL:select
) F' k( R- F- h2 o! T" @DDL:create / drop / alter / truncate
! u* @+ m1 ]: W1 m$ {& }' ]DML:insert / update / delete0 `# W5 b6 J" N  j* D! {$ S
TCL:commit / rollback / savepoint
6 r) E7 A) ?+ G1 w: W/ O# vDCL:grant / revoke
  i$ M" h6 R+ _9 g. N% w* X8 ]* O
, C1 |5 R9 b+ @; B" w  c) o) z; v; V2 r一、DML操作  J/ x$ X% q: A
1.insert into...values...7 T+ J& C% G# |# o) W
--1.1.不写列名
/ W* x9 C2 z: B" P" _( e--必须提供全部的列数据,数据的顺序必须按照表结构
5 M! x5 T. n; i' m- k--如果有数据没提供,用null表示
8 c4 j+ C* D3 Y+ V0 S" O* `  uinsert into dept_ning. r$ }, V  W/ P! r+ h
values(66, 'market', null);
, M. }$ [% Q5 J) w. x; m% {$ }! Y# @; x- A* Y: ^+ [- Z: Q) p0 b
insert into emp_ning
5 q1 Z- r0 t6 ?/ svalues(1020,'rory','Programmer',6000,null,null,* @4 I- w- t& B  D& p9 C" I
sysdate,10);
8 t1 {' L9 {3 J! O: z
$ x) J0 M4 P* ^" g- L8 O6 `--1.2.写列名
" y" _# w' t5 {& s! D7 M, K. ^9 Xinsert into emp_ning(empno, salary, ename, hiredate)
/ h( y' i1 L  Z( k& p$ |values(1020, 6000, 'rory',  4 Z2 p# w" G4 D! ~' u" O) q
to_date('2011/10/10','yyyy/mm/dd'));
( b' R' Y: |+ t7 ^) X. F- N
+ ~1 e8 W% y8 v/ d2 g) h, J--to_date函数是oracle独有的。6 Q* U' u, z1 P3 C) Z9 J/ ~: r7 K* _
--在oracle数据库中插入日期数据,一定要用to_date
% t& J! s6 y9 V/ `处理,不要采用默认格式,比如:'10-OCT-11'。0 {9 B% e$ {2 W( Q8 T; J

- L: J/ o% ]6 ?+ o--建议采用:写列名的方式。即使是插入全部数据,也" U4 c% o3 h5 r) v0 P
建议把列名写全。
7 r3 E  V& k4 V& v--复制全表
' V8 B0 t( }" }( Icreate table 表名
1 D! q2 ?# {$ [# F) g; K& z1 E6 u3 Gas
# ^# a# L% N# C1 l查询语句;
, R! Z, c  o4 r) @' S1 l2 Q* t( D" o& m4 J/ a
--只复制结构,不复制数据0 b# j" X: |9 t: e4 \* ?
create table salgrade_ning13 T5 S- Q0 `6 K
as
# L2 q  d2 Q& e# b# m- Sselect * from salgrade_ning
; \, \* C1 V4 u" |8 Hwhere 1 <> 1;
  \9 V( Q* q  w2 c8 U" n2 Y2 b. t" H. I, E- S5 U
--复制一部分数据:给查询语句加条件。8 G7 ~' y  `6 U: O" \+ N5 A. O
--如果查询语句中有表达式或者函数(包括单行函数和' R4 e$ F" `: q! D. Z, B  M
组函数),必须指定新表中的列名5 `% K! M& A! F8 `& V1 P9 D0 r4 k* V
--指定方式:给列设置别名;或者在新表后指定。; V0 }  i" Q* ~" o
create table emp_ning1
4 U9 j0 l( V+ _3 g( z$ Gas; v% e% D& b1 u' g5 A3 {
select empno, ename, salary*12 year_sal- j% r7 [- J/ W- r
from emp_ning6 d: i& ^) c- ^& W8 ^8 ?
where deptno = 10;- w: g5 q; n7 l- C  i3 E
; j* T  T& Q" r
create table emp_count(did, emp_num)
! ~9 v0 n0 `( Ias9 V# J& S% {) Q% I! _7 p) I
select deptno, count(*) 9 i" T3 i+ G( o4 I
from emp_ning' |2 m9 R8 w* Z/ c3 A% U
group by deptno;, g' B$ T' }- f7 h' h0 o( |# T
3 N% ~. b1 b% B, K8 I
--创建一个空表
' U: o( ]2 I0 ncreate table emp_bak1; x4 m* R0 F$ {- r& J' U- B: b
as
+ H, l+ W1 R8 i) A2 X/ W5 u% F! ^select * from emp_ning
  C2 L' Y' _2 i, n- m( ^where 1 = 0;! Y# T( k; r& E  p- z8 B7 i

: j+ p# j& B+ n* P--向表中插入多条记录
" i* Y6 r6 h5 `2 T' E" Rinsert into emp_bak1
* y' Q( Y$ p* y4 x(select * from emp_ning
% C- R4 s6 O  B& G6 i where deptno = 10);
. [# o0 M, X: f8 u) M7 k6 K( O; P& [9 n) @9 l
--把表中的数据换为部门20和30的员工记录
, h2 y  X/ P6 n- I. ]" G2 ydelete [from] 表名; --删除全表的数据。* ~8 @# d+ O  U+ a" y
delete from emp_bak1;; O+ a6 F& h8 d% \

, g! Y1 a+ w' |! g! K' x2 v% {insert into emp_bak1! B  C4 F- l5 S! e1 Y, P' f
(select * from emp_ning, C0 H* h- U, N, P
where deptno in (20, 30));
7 h% q7 R4 T) _) a5 e) r
8 }  s/ ?; L4 @2 c7 f4 w6 }--向新表中插入指定记录数的数据,比如前8条。4 {5 \  _1 Q4 h7 J# R# Q
delete from emp_bak1;
; ?8 e! O# @3 B1 j" J3 }
* |" S9 l) Q  [: J' Uinsert into emp_bak13 O+ |! d, P. V0 t' I3 p* p) c
(select * from emp_ning
0 ]. v/ @) p, Qwhere rownum <= 8);2 ~/ n, E" d3 w4 r$ z
$ m0 T/ }8 W7 I8 [
小结insert:
& P9 Y6 R# ^$ N6 L8 L9 l1)insert into 表名(列名,...) values(列值,...);
, G* ~5 C0 S" C6 z. k一次只能新增一行。; ^4 M- ^# W0 L) X; H- t6 s4 [: I
2)insert into 表名 (查询语句);
" J( k8 i- p; x2 ]* e) f# L: N一次可以增加多行。7 h7 L0 B: r& U; J

7 o- C. Z9 e6 ]7 E( d2.update:更新数据
5 K3 S# u9 V6 [1 ~update 表名 set 列名 = 新的列值," y: |: p) ^5 |  z; e# s
                列名 = 新的列值
1 k4 q: P" z. s) `- ?2 jwhere 条件;
0 C1 _* U& U- r- a' m' I7 Y1 n
4 D6 A5 V9 ^3 O" f4 [+ pupdate emp_ning set salary = 3500,
: o2 _; R, p& }. n" q* ~# q& b                    job = 'Programmer'8 A1 f+ t9 o: Q1 U; {( e  V
where empno = 1012;9 t" s$ y4 u5 }* R

9 T' u4 V" x7 ~& h--部门10的员工薪水+1000
8 y- u8 c8 B7 A" x' fupdate emp_ning set salary = salary + 1000
) V3 W0 r) I4 n9 fwhere deptno = 10;- |  i& B: r: ~2 E- q5 x( T0 E8 R
6 Z- c: _: e$ U/ m4 M
--更新数据表时,注意条件。
% v( w8 b: N2 x  r( V--如果不加条件,影响的是全部表记录。2 x. K: Z- J+ c  g; U0 N; w
6 K( o, ~. D5 K' l" q. U
3.delete
% B2 y/ s8 _% w  u6 @' B- }--注意条件。
7 S4 A$ b" J' M" d  K- K3 ^  m% m9 ~--如果不加条件的删除,将删掉表中的全部记录
0 [  E) E* ?) B  K- X--rollback 回退,commit确认。( z0 M( U" y9 ^0 `$ R
delete [from] 表名 where 条件;' P/ e6 Z# Y/ Z

% b# C9 n, g- p. m: q3 jdelete emp_bak1 where empno = 1002;
- O$ r. m% q$ g+ ^/ c- S% D. y4 A: F6 ~( f! h
delete emp_bak1 where deptno = 10;! i( t- g- I4 |- |+ ~& N

4 I& p1 V1 O& L+ ~1 \delete emp_bak1;
. c& n; c7 f8 y5 E6 S* ~' [& M: D* B* i9 S& z- k8 [
commit;; N' J% U9 D6 A* I% d. U; O
--执行了3遍
6 M. G: J( T) a$ I* ginsert into emp_bak1(empno, ename, salary)
- g* {7 Q: p7 tvalues(1015,'amy',4000);' D* Q* x3 [. }$ ?6 u/ ]
--执行了2遍5 c& v8 x$ U4 z1 q0 K, F+ e( q' L
insert into emp_bak1(empno, ename, salary)
4 }/ z* I& G5 [- \values(1016,'rory',5000);; p2 i& ~. B9 `9 }
--执行了1遍。
4 O0 b( O! |1 a8 H5 jinsert into emp_bak1(empno, ename, salary). ~' @% a9 T. e$ j( b/ E
values(1017,'river',6000);! O- Z( {5 d9 L3 o7 j9 m
--创建表emp_bak2,只存放不重复的记录+ X, R: N' P2 j7 d" w8 p
create table emp_bak29 p* v  S3 g1 m. U
as
9 u, J. |# l9 `. ?+ t8 Lselect distinct empno, ename, salary, hiredate, job, bonus,deptno, mgr0 ^/ u8 y8 ?! I' h; A0 `8 \6 m
from emp_bak1;
( I9 W( K( B2 G--删除表emp_bak1
: K6 y* L6 g% k5 B' R* P6 b4 [( X' }& mdrop table emp_bak1;" m% r8 `- y9 Z5 r* q
--把emp_bak2改名为emp_bak1
: H) S! V) ]& p' {% J( q8 ]rename emp_bak2 to emp_bak1;# w, Z+ C8 Z- P, N1 q

/ |( v$ Z( N7 q7 Q2 ?___________________________________________( ]+ m) a: i) Q1 @& e. v' k

. s5 `* m3 ]/ I
1 w. P3 p! b( y' i5 B8 ~! hdelete emp_bak1;. i/ J2 x3 O5 h- }$ m5 b3 p! A

; w. s$ f  R4 \6 F" Y7 `insert into emp_bak1(empno, ename, salary)! R* ?9 N0 y4 d% M7 ~- e$ v
values(1020, 'amy', 4000);
$ _9 ~  W) o. C8 E7 h! ?- einsert into emp_bak1(empno, ename, salary)/ o0 S# \$ l) h2 a+ R
values(1021, 'roy', 5000);# Y/ u# b; w2 K: {2 L: [
insert into emp_bak1(empno, ename, salary)1 w4 N9 y+ e! J1 h7 K0 g0 E7 y
values(1022, 'river', 6000);% e* y# G) \% G( F- n5 R

; w3 }$ o8 o! l--rowid是Oracle数据库的伪列。
( @. A$ }& e# Q8 ~& @' W--rowid是Oracle数据库独有的。
. H2 e" C6 O$ z2 K delete from emp_bak11 e) Y- e8 T# t5 M- i  C
where rowid not in (
: O: ]5 w+ T- M; C$ O( [   select max(rowid) from emp_bak1
+ _$ z1 o3 L$ F& }% a! Z   group by empno, ename, salary);5 R5 }! t8 j) e6 z
- ]" c$ d' T, X2 V, u3 j
二、事务:Transaction
7 q" s; X+ [4 P2 w: n7 t. O- xTCL:Transaction Control Language7 n4 Q3 D2 t6 G/ w( B: f
commit / rollback / savepoint
/ w- E: ?8 P6 u7 J9 w- v: r' @事务:一组DML操作的逻辑操作集合
; P. i% ^0 l! M6 C, |          ***
/ O# `7 N# E4 v3 O7 \( u1、事务的开始和终止" y0 T1 o" P# v- s) I
1)事务开始于上一个事务的终止或者第一条DML语句
8 o$ [7 k; J1 i$ J, l8 ~2)事务终止于commit/rollback显式操作。
8 ?: e4 v  K2 D7 Z0 U  w  连接关闭:隐式终止- C/ ^  G% c9 A$ q/ D9 a
  DDL操作,比如create:隐式提交。
' H/ x7 d  ]4 [; k1 c
: p2 u" ?, m1 V, Q* finsert into ...values...
! C" @) `) U6 \* N% @) lupdate ...
- G& A) w3 b5 K( mdelete ...
7 B+ y1 T: ]3 d  Y( P+ Vinsert into ....
" O5 T5 V* a1 X8 B- s* Q, L--rollback;--回退到事务之初,数据的状态和事务; V/ P# n5 J% Q- ^/ E7 W; o% g
开始之前完全一致。: Z% w3 O' q0 G
commit; --所有的数据改动提交。
7 [1 u5 D  F# L( `" N) f
. ]' r& r# E* j1 o2、事务中的数据状态
+ f9 q0 X6 K* j# mcreate table mytemp_ning(' p' N( C  D, e
id number(4));, Q1 l! z: O) f  y+ Q! C
insert into mytemp_ning values(1);
& }# R) ]2 W8 M  m( `2 Einsert into mytemp_ning values(2);$ x) w$ @: v& e8 K6 ?% ?! Q- l) u

2 Q/ E5 y4 D/ W( K* K2 k3 K--事务内部的数据改变只有自己的会话能够看到
  [6 q3 C4 m7 ]% C--对事务改动的数据加锁,事务之外不允许操作。2 u2 c4 q9 H  Y) U

; f, q# r* u5 E" z, s( x$ ^: W如果提交:commit) z6 G9 E: e1 n* M9 `
数据的改变被确认。所有的会话都能看到这种改动。4 k/ Z6 ^+ j4 O5 @" p+ \: R
数据上的锁被释放。
4 k9 F+ d" E; f$ B; P保存数据的临时空间被释放。
8 M0 ^- ~+ w  R9 x' B* i: r; C" {4 P5 W$ r
如果回滚:rollback
9 _/ h  \$ G; v/ o4 P, w; e& Q! V3 x5 R数据的改变被取消。& B1 Z9 |4 w2 R7 y, J' g8 r
数据上的锁被释放。3 i4 R% }' l4 R# c9 h9 y/ B, _
临时空间被释放/ B2 \% R) x7 b2 v) n4 r
create table mytemp_ning(id number(4));  i( [! d3 ^- ]- q- G
--事务起点5 F6 x5 Z$ n$ p& j, N4 P1 ~
insert into mytemp_ning values(3);, A5 q. |2 a. N
savepoint A;
0 L3 ^6 S* {) |1 X3 |& einsert into mytemp_ning values(4);# C2 o2 I* N: R3 ~' d' ?- R7 R9 g
savepoint B;
* H2 s2 m- y# N& H3 Dinsert into mytemp_ning values(5);
6 y+ K4 C8 r" y; R: o, p* _) Brollback to A; --回滚到保存点A,A之后的保存点全部被取消8 o( t) C( c4 X2 S2 ?2 f+ O
select * from mytemp_ning; --3保存,4、5回退
8 ~& x6 b: f7 z. o! [2 [) }  f
) D) d, F5 M) @" N* m. o三、DDL
; c7 S2 A+ b2 u1 M* R8 Bcreate / drop / alter / truncate9 p8 E) s9 d5 U9 e4 i( b

3 e9 N6 P1 B! R4 k- I9 i& X数据库的脚本(script)文件main.sql:
8 R4 c* s! D7 Z0 _$ @7 K------------begin--------------------
( w; `) e8 J* D0 j. N) O--删除表emp' c/ t6 w  n* ~6 q- K# o
drop table emp;% e6 `! s) F; r5 K4 z3 P+ _7 x, x
--创建表emp
3 K" H% |7 c3 \: }create table emp(id number(4),
1 Y5 t. g! J& V9 l0 Z. j+ hname char(20));9 n9 _- `! x) ^9 F$ t
insert into emp values(1, 'amy');7 u  p# Z/ D& w  k: w2 |
commit;9 H0 x0 {! D2 ~
: y( D# Q$ F) x. E

# D+ W9 b: p9 w) }

科帮网-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群 科帮网手机客户端
快速回复 返回顶部 返回列表