科帮网

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

动态微博

查看: 2258|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |正序浏览
数据库: DataBase,DB
, D# X( h- w* F# o- B( N! T  {存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。: t; r; ^# u# H& d  i- {# m
oracle是一种数据库软件。
" p' I( n% i# j/ W- {2 L" t3 U0 F5 [( @+ H" r0 r
Oracle  db2(IBM)  sybase(sybase)) x' l0 p# c$ l) F2 Y/ B2 b+ O
sql server(MS)  mysql(Oracle)0 z! j! O: j1 B0 o5 b7 F
access
$ [9 j: m" l# R  m+ _( q# T1 t2 t+ T/ L- _0 [* L/ [3 |% @
数据库管理系统(Database Management System): DBMS
- o" r. t- O/ @' i  X
" H; ]5 _/ q! Y- S; a- C  ]6 w3 JSQL:Structured Query Language( X: H4 h2 N8 N3 S
结构化查询语言:和数据库沟通的语言。
* t2 ^& s& d+ o6 s; p5 T% e
9 A9 K: L! O: wDBA:Database Administrator 数据库管理员
( C4 F" J" h6 x8 ]- V
& G6 E4 ?9 H2 b7 K) D$ T# xTable:表:数据库的基本存储单元
& L' _+ G4 s' }% f0 B0 l横向:行,row,record. \  e' ]# _3 [4 S- J0 A* r
纵向:列,column,field9 L1 k: O, m! R* v' m/ ]6 ^

4 ~+ f# H8 T; J  p, r, M$ k任务:把用户数据存入数据库的表中。
) @5 }1 P; m) Z4 d; _4 |6 R2 ~实现:
, \# ~9 I4 |; e# v7 \( v5 T0 x1.建立一个连接" W2 \+ _  C( ]3 \
1)数据库所在的服务器的地址:192.168.0.269 Q. g* G4 [: A5 j8 [
telnet 192.168.0.26
8 M1 j1 H# @( D8 x7 R8 ?服务器的帐号/密码:openlab/open123; ]  f, _- d3 B
2)数据库访问用户:
# m# K, B0 Q" Z/ K3 Ropenlab/open123& p: S( X. h5 ?9 ~8 N6 Q6 S  X) P
数据库默认帐户:scott/tiger! N8 b& l2 D. q* J' i- l: Q( w) E
3)oracle数据库的连接工具:, F8 }1 l( p. Y. R7 C# Q( u
SQLPlus:Oracle数据库的客户端工具
3 L0 c' B9 v8 F# ]位于数据库的服务器上,192.168.0.26; u8 w2 X0 a4 x& v' C
$ sqlplus openlab/open1230 |& x$ \) o$ s( Y/ e
SQL>
4 i) \4 V( X  K0 F" @4 q1 n1 i如果提示SQL>表示登录成功4 D" l0 p5 V; y  g, M% t# b
7 G7 l: l+ j( t$ H+ B. ]; ]
% K8 {0 U* q! ~
2.把数据表建立起来。
- d# b- i' f4 P9 Y  ?  ^3 Z) q& }定义数据结构:
. K, K5 F( i! wcreate table user_ning1(
, u1 D. W1 F! O  xid number(4),% Q+ o! y/ a/ j6 ~1 \& Z; a
password char(4),
% D: @, L5 E' z4 D- tname char(20),
9 m4 \. d) }6 c/ [$ u+ n+ u, _( Z& dphone char(20),
: V/ M9 @; }) y+ ]email varchar2(50)
+ Y- u$ \. u' ^, H4 n);  D! R# N$ G% ~, s0 b
提示Table Created. 表示表已成功创建。
' O1 u9 S8 T; L. f6 ~, G$ w; ^# h/ J* s2 s
数据类型:
( T+ b4 C/ X+ `# k; n1)数字: 4 [+ f$ v; y6 g+ c
number(n),最长n位
6 f! d6 w; M, @  x2 W! bnumber(n,m),最长n位,小数点后m位
; t. ~9 q+ {; d! l2 l) fnumber(7,2): 99999.99& S8 [. L$ V# n: a, d* y

/ m2 i* s- e4 l7 S. _' R2 a2)字符串:
$ {; d3 r) o0 @. p. Gchar: 定长字符串! r) _# Q& Q. _/ V3 a1 _! L
varchar2:变长字符串
$ C1 G, I8 ]  A# M! R8 a! i- Bchar(10)  X& G* ]0 Z( R+ a+ g
varchar2(10)
* l7 h' Y" A' ]# C3)日期2 l. g. T7 {' \- ~( K5 \7 U% |
date
' Z3 {- ?: ^2 w4 n% X( }! _  l: V+ g" P
清屏: clear scr
( ~- F# j# @8 X9 l' ^' E; Y
, ~0 q/ n. s  x+ T5 m; i: l  L5 X3.把用户数据存入数据表中。
8 D7 i: r: }- I% |5 T% x" H6 pSQL>insert into user_ning1
. v; E0 @4 d. x    values(1001,'1234','liucs','13600000000','liucs@sina.com');6 J6 U: o$ Q7 d) K- \

3 q# e- R4 a/ J6 k- Y* t. y- ginsert into user_ning1 values(1004,'1234','liyi','98765432',( N. c4 E' H" t; f; L
'liyi@sina.com');/ L2 Y2 Q  w( D% K& O7 ?
: Q6 f7 @1 ]: ]0 Y: X, E! {
错误语句:- s' g) _$ i+ K
insert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
, @3 b$ G3 o3 w1 @# [" `5 N8 r
; W0 O) T4 [& B9 h三种SQL语句:" s9 S& B' R% g
1)create table...% L/ A6 O& {7 L, K, L0 k0 r# q
2) insert into...values..., p' z. c* _* H2 `! Z4 J% D
3) select ... from...
6 L. M7 ^9 k" r  h& `. k+ G
7 L& R; h: L% W8 v: OSQLPlus命令:$ F9 Q3 B& I% R  ]/ \: q
设置每行数据的显示长度:
! a& P$ i6 h" ^SQL>set linesize 200
! n! k9 |- b/ E% W! }设置列宽:10个字符
1 V* `' C& d/ aSQL>column 列名 format a10  }+ O2 }( w& ?( L" [9 Z
查看表结构:desc:describe 描述  v9 O" t1 H6 E8 y! L/ O; C- ]$ R4 W0 S
SQL>desc user_ning1, F6 r! g7 c  ~, N6 i5 {
  D1 b7 Y7 Q+ P& A. b$ B9 Q3 n
规范数字宽度为4位:
' H  l3 O( c, @0 K7 N' q, ~$ x. mSQL>column id format 9999) \3 E. g7 [0 \: k, i. |
简写:* S+ ?- O" h8 _( i4 ]
SQL>col id for 99997 W$ i. j+ I( d, l

# W: u- Z, d7 G0 W/ Z--*表示查询全部列: H5 j7 r0 I0 v6 S
select * from user_ning1;, A: P. s  o3 S. ^

. s: R5 r- A5 g$ wselect name,email from user_ning1;; r( `. t1 u  M8 w+ ?8 F
1 u3 e4 I2 L8 P2 ?- V. W
--查找1001/1234考生的名字?
% _9 g4 a  g1 r/ x  x* v3 d' s/ jselect name, email from user_ning1. g, L$ ^# A, j7 v1 ~
where id = 1001 / O1 d  f+ a( C) k  n! c
and   password = '1234';# r  q2 B* K! U% q2 }( F8 K
: R7 q& G1 F: E
数据准备:; Q/ s+ M& i# G" B7 }- u$ Z' x
1.表dept_ning:/ \1 b' g# Y" {
create table dept_ning($ V, y9 n) @) Q6 L' I' d! I/ Q
deptno number(2),# f* m: {8 g0 u) K* K2 K0 {
dname char(20),
( y8 h7 Y. z/ {! W( w2 a6 ]location char(20));
% j* r) N0 M0 u+ A. ~% x  N8 ?$ C8 s( L, J8 k
drop table dept_ning;
1 ~6 ^# z3 X4 a! @& \  Q4 x- \& ^" H2 a) a8 f7 w
增加数据:
3 x; a* T1 F7 Y! J4 ~2 b  L7 Iinsert into dept_ning values(10,'developer','beijing');
4 B6 M  G; V$ q+ ]- _insert into dept_ning values(20,'account','shanghai');) _3 H  Y6 P' M! t! G0 T
insert into dept_ning values(30,'sales','guangzhou');
7 Y6 ?. Y+ P9 B7 H5 E% n2 D9 Yinsert into dept_ning values(40,'operations','tianjin');2 g  [7 O0 `5 H$ v

) `1 O" [$ C, B4 U  H1 X: Pcommit;! m% x% r% U2 y9 H. B" k
9 U( |; i. s' k$ ^8 M( w% D- o" \
select * from dept_XXX;8 `) v- B: \8 L; e
% |4 l& E2 W$ ]) a3 s
2.emp_ning. ^) g1 }" D% J! X1 s# d2 D8 v
create table emp_ning(' L7 F/ f) i3 S# a7 Z3 Q
empno number(4),
, G2 {9 e; D( {% r7 q# a/ O. c, O! sename varchar2(20),
2 E* \" A( U% k0 M* o" Yjob varchar2(15),
# J6 o% R4 Q: tsalary number(7,2),
0 i$ t4 U: N9 t+ e- {bonus number(7,2),
. D; M$ Z; T6 ?4 z+ T8 shiredate date,
" Y0 M9 A  a  P/ q1 z, }2 ]mgr number(4),
" R; ~3 S  J2 q& y+ jdeptno number(10)$ X' ]. n- e/ J  D! f# M6 u
);
9 y" ^$ H% R8 i- [- k, N$ ~
/ n" o' X& N2 X1 Dinsert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
+ W$ s2 Z) r4 ~' i5 x$ n7 x: Linsert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
* Z4 H; b) x- R4 S# jinsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
0 M2 T. D$ m. W1 c8 l3 kinsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); 3 {( m7 d$ @0 s6 Y7 Z* T0 m* e  V
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);% u8 e6 x5 M3 U% l6 K
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
* k" G: N3 X3 w) I8 ~* F6 \& uinsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);5 ?6 k! U9 t' ~7 s/ [# `
insert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);7 h  q- K# x% B3 }7 `  i( P5 d6 S6 i( O
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);+ f4 l/ h- S* o' d; |9 B, @
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);! j* q6 r" V4 Q% l) U

; 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* F8 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

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


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

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

   

关闭

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

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