我的日常

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

动态微博

查看: 2097|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |倒序浏览
数据库: DataBase,DB7 B, I. C! u; D4 W$ |: D
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
: e& Y2 P. k/ J3 boracle是一种数据库软件。
' g. v; [% k2 b+ P" G; ^) G, }9 J6 f! @8 \% j$ B
Oracle  db2(IBM)  sybase(sybase), z1 L! T* h8 b* p" O4 ~+ m
sql server(MS)  mysql(Oracle)
$ K4 Y  q# u2 x; o- m6 C; U5 Baccess$ n" m5 Z4 l# G* F& z; m4 `" \

- F6 W; d2 L% q7 K数据库管理系统(Database Management System): DBMS+ l& w' F0 S' \
: [1 I  z" y4 m3 w: a* e" I
SQL:Structured Query Language4 h1 x4 p9 A1 o
结构化查询语言:和数据库沟通的语言。
  |1 M* ^7 o/ g* \1 l0 T4 D8 ^  O/ m; G( |6 e
DBA:Database Administrator 数据库管理员
& Y: [7 j+ j% \+ t! H, a9 Y1 A6 ?  l: ]7 N+ a* L2 ]2 M* `
Table:表:数据库的基本存储单元8 Y, x# a9 }+ [7 p9 M  @) ^
横向:行,row,record
# J$ O9 Q, `; b/ t4 J- z" N1 i纵向:列,column,field
9 K- ~/ X! Q6 N2 j; L; J- d6 X! V0 z
任务:把用户数据存入数据库的表中。% t8 W5 V) J$ v. N+ U, B
实现:9 l% H% y. m! ?( ]( K0 f! A# p
1.建立一个连接! _# N; C( V2 W( c% a) ~
1)数据库所在的服务器的地址:192.168.0.26) p  Q! i# @& K/ x
telnet 192.168.0.26
( G, k5 n: `3 _服务器的帐号/密码:openlab/open123
. P$ ]/ X; @' E8 g# j2)数据库访问用户:
9 k& A- B7 }2 Yopenlab/open123
+ Q2 {: _1 Q' O  f& V8 a数据库默认帐户:scott/tiger$ j5 s3 F- f3 V' A# N$ R
3)oracle数据库的连接工具:, M$ ^. P! U5 k# d; ^
SQLPlus:Oracle数据库的客户端工具
4 }) n9 g5 w6 Y9 d* z/ {位于数据库的服务器上,192.168.0.26! g. `" m% R0 ~7 t
$ sqlplus openlab/open123
& g! d) K! W! P$ v5 r' ^; O* ^6 ySQL>
$ W* l- l. \4 n如果提示SQL>表示登录成功8 i8 d9 {: Y6 C" K/ E) s# I

: Y, ^! g! o7 ~" l
- w: X5 x- n" u; D2.把数据表建立起来。7 k8 G1 ]+ P6 {7 w) h2 V2 x+ ~8 ?
定义数据结构:
6 n3 a! W5 W0 ycreate table user_ning1(3 A+ c: M5 Z5 x# @! `
id number(4),
1 V/ l, s" \* |password char(4),/ ]$ a; \- M) `$ E
name char(20),
8 R4 w9 r4 b  D7 i% U9 Aphone char(20),
% ?: t& E3 e+ O0 I! [email varchar2(50)
5 @1 f) c& Y6 X) O' W/ ], Y1 Y);# D( ?6 M  m: u% o
提示Table Created. 表示表已成功创建。
/ r. Z/ D7 n" t/ ]0 U( r( v% ]$ M9 x' r6 N3 t2 v
数据类型:6 p7 d  U1 @$ W' w: Z
1)数字: ! }+ v+ t6 P; W
number(n),最长n位
1 M: V( f7 }! q) A  `+ ?number(n,m),最长n位,小数点后m位$ t7 P# [9 x: Z" X  v6 F% R, s1 ?
number(7,2): 99999.99
% Y0 b% H5 G1 z% t( ?* M& E5 ^$ ]
2)字符串:* E6 O# x8 s0 w; h& e3 |
char: 定长字符串
# J5 A" F- o% o# L8 V$ fvarchar2:变长字符串0 F) v. o0 c. s& k9 q$ f7 h2 B) S
char(10)$ Z0 M# u. @- ^" F1 R
varchar2(10)8 G9 ]" K3 {. D
3)日期! z  W( E/ J- T- \  F/ P+ I6 T
date' M* y1 G. ?2 p0 G- L3 F
8 T& E" v+ ~" x. \& T
清屏: clear scr
' t+ ]; J* `0 u: b7 s. n- s
" C  V5 j0 P6 Y/ ]+ b8 g. ?, O9 N# _1 Q3.把用户数据存入数据表中。
) G4 }* ]$ J. r- C4 |7 fSQL>insert into user_ning14 a$ X* r( H  i# O5 p
    values(1001,'1234','liucs','13600000000','liucs@sina.com');
7 U2 X! G2 J, p( ^8 B
2 m7 p; [* m. g+ K5 pinsert into user_ning1 values(1004,'1234','liyi','98765432',/ y# v: c9 x' T# o/ ~
'liyi@sina.com');# o# k" p) F' t1 v. F

" l% y- a/ M1 W6 I 错误语句:
2 o* H% O! N. C" }4 |4 V8 tinsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
6 p5 B. Z  P, _6 f& ~6 I( \1 t. k1 a) u" n; S
三种SQL语句:" k7 a' u' X- Z/ P" S4 w
1)create table...4 J2 g* @, B' L) ]: Q3 ?
2) insert into...values...
& L3 \$ f  G! J3) select ... from...
8 L9 L4 n  ]& `3 z! q8 W6 D2 F3 Q. K2 J
SQLPlus命令:
' x+ Q6 `. Z" b0 i" X" e$ i9 B* t设置每行数据的显示长度:+ K7 U- E0 x; g/ f9 {
SQL>set linesize 200
- r2 Z* q3 a, _7 y6 n设置列宽:10个字符1 U% A( M  _( ^  X' M
SQL>column 列名 format a10' }3 J- P3 K* t5 P) X5 }
查看表结构:desc:describe 描述
, K: T2 _$ f4 n6 l+ x& \1 @0 OSQL>desc user_ning11 ~; a2 v5 }, m! w# ^8 @% y& |

. L0 o# x; M9 ?$ A$ Q/ G3 @: H规范数字宽度为4位:
# {2 [5 @/ s+ S/ CSQL>column id format 9999( ^6 S6 r& z* d( M" ?- x" J# F
简写:& v- L' [$ \% Q" q  M5 `
SQL>col id for 99999 u% Z6 v& d" P& _  i

4 p# ?! c: r' [/ g" d. r1 c--*表示查询全部列4 O/ K' T( I0 J, v2 q" e
select * from user_ning1;  o; B+ e  Q  x+ ~
; j7 ]; R+ ~) i
select name,email from user_ning1;
+ ^. l+ c! R- a' Z& Q9 a& t$ c. N: ~
--查找1001/1234考生的名字?
" \5 G! K- n. G0 T5 h( j- b8 G/ vselect name, email from user_ning1. N3 D  a0 ^) z$ w# o; ~( T. g8 n% `" b
where id = 1001
5 _" E) M6 e( `+ Uand   password = '1234';
; j% O6 ^8 j- J. e9 ^. z
9 x3 C; b1 R+ C9 W, {数据准备:. o2 d- ~4 Y5 n/ I3 T( ?
1.表dept_ning:
0 A/ P, V: O4 ~7 u7 W. x0 Fcreate table dept_ning(
$ z2 j+ x" T% P6 N$ [$ s6 ^deptno number(2),
2 ^  K. X$ G, k7 r4 j7 {) s! w; Sdname char(20),
( R( z, P  I! J. x% }8 |location char(20));( g7 L7 u. u9 n$ p$ f

: u6 h, @# ^* b+ y" f! ^" U3 Odrop table dept_ning;7 b' s' a8 i7 y; h- {

- T2 Y( S+ B) S4 e4 ?增加数据:# j  [7 O- \: a
insert into dept_ning values(10,'developer','beijing');7 i" y3 O/ R: U5 L$ I/ ^
insert into dept_ning values(20,'account','shanghai');& _/ P* R( P3 \4 [: w  {# `# B; A9 O
insert into dept_ning values(30,'sales','guangzhou');. h  |! z% n' N) k
insert into dept_ning values(40,'operations','tianjin');9 s7 Q. X- x2 _3 `- o3 ?, K5 [
6 V5 @- `& r' e5 y# T+ l5 N
commit;4 y- M; f% I0 `( j: r$ M

- @: i4 S  d, @# O- D1 D  lselect * from dept_XXX;
2 r6 ~1 {. X4 D$ \: w' z8 G1 j# g7 c" q3 P* \; J
2.emp_ning" u+ N7 }/ G& T4 v6 V. ~  V
create table emp_ning(
9 Z8 L5 D) ?4 d; ^empno number(4),/ @2 X, ]  \3 X$ [) Z- Z' V9 E: G
ename varchar2(20),9 }/ k8 \% |5 @
job varchar2(15),& m6 Z! s4 I. `4 j! j" R
salary number(7,2)," h7 G, A, a4 e6 b! H4 H
bonus number(7,2),/ ~/ Z- J4 y; A- w0 `$ t
hiredate date,/ y9 ?/ |& i3 ~/ ^  H  E
mgr number(4),! [1 W! d  L" F. Q$ _, a8 r$ ^
deptno number(10). I+ R  h3 \+ e/ y5 b
);
4 B, W7 w! |3 U* V% h
1 \* o/ X% T8 oinsert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);( J9 W1 G' n7 U
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);- y0 \% i) c# ]9 j2 s2 }" c
insert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
" [7 _" o$ r: P. ~3 c5 Y$ L8 cinsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); 0 ]* l( }: [6 ]/ t! B
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
& q# q( R3 A! x) i  i! xinsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);0 M6 H1 ]- a2 o/ j
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);/ s7 B0 s9 H) L; D9 _
insert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
" U/ h6 U; x" x7 X# J& Ginsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);$ y! k- ^1 }; L( _1 |* `
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);1 @) ^$ G9 R: @6 n  p4 J4 T

- ^  Y' ?: x$ hset linesize 150
# t! H3 z" t, N& ?: Bcol empno for 9999
7 U4 O6 e$ _1 v& ^1 i6 m% ccol mgr for 9999& x) V' |* d5 V, M: a; S+ A) U, n1 u- t
col deptno for 994 f$ L8 ~: U0 l8 d
col salary for 99999.99
5 |2 A8 ?1 r" V: v: D# L& l! |& A  Z& i
4 P* h( y: e1 |3 \8 Eselect * from dept_ning;1 j( {3 D; T- l- M- \/ Y
select * from emp_ning;! T! I; ~6 P4 _+ q2 [
5 o1 f8 i- |. j6 I* i
一、学习查询语句。+ z% i. J4 a6 V
1. 计算员工的名字、月薪和年薪?
6 T$ }* p+ j  i" s+ q/ `$ H! Eselect ename, salary,
+ L) E. Q  ^/ Y& I" S  G' Msalary * 12 year_sal
7 }3 {. ~+ E, t& Nfrom emp_ning;
/ c6 k" a3 t! y- r! `
! Z9 l( T8 C% I; a: g, O- g2.计算员工的月收入?/ O$ Q  t/ }9 {0 {( m
空值和任何数据做算数运算,结果为空(null)
! U7 ]2 f3 r1 b* tselect ename, salary, bonus,! T: j% ~5 ?! U
       salary + bonus month_sal  S8 V7 m; c  ~. x, I7 y' }  j: T
from emp_ning;
; j7 @0 }( O0 o; J  @* F/ K$ Q" B7 k* c+ x, Y) \/ q
select ename, salary, bonus,6 Q5 @! z* n7 ?  R! }
     salary + nvl(bonus, 0) month_sal
2 z7 e5 ?8 N& y8 z, `from emp_ning;
5 o5 y  W1 [8 q6 j+ x( B; Q  l4 n9 i" Z) e- k7 ^
public double nvl(double d1, double d2){( z6 E5 P/ L& f7 b+ H
        if (d1 != null)
) j, Y, e9 e) T& d" A+ T            return d1;( E# \+ ]' R! e8 ^% y! j
        else
- u+ u' L. T; z8 ]            return d2;       & ]5 Z5 a, C! C( {: y2 F8 v
}
# i6 P; K) ]" q1 x/ X# O5 dpublic String nvl(String s1,String s2)
( P3 W' ~5 W1 y: h/ x9 S{
' k/ |% O* Y& P* p1 W0 ^# _) \        if (s1 != null)
' z( }+ V! l! u/ M& ~. z                return s1;/ B" s3 a+ \0 N1 t: S2 H3 {3 v! e
        else
$ g/ ?1 T# Z0 e+ I% ?. F0 n1 P                 return s2;* t# i) a! w  J* ?; e
}# ~" Q+ m( A& N  R* ?- U
public Date nvl(Date d1, Date d2){9 g; A- V0 e" n( |" K0 q
        return (d1 != null) ? d1 : d2;
! E! |# C/ S) }( k4 C/ D/ \}% d" _" T5 i" Z% {0 i
% C1 f' @' B  w# J& [
insert into emp_ning
/ b' }1 p3 `# w, evalues(1011,'余泽成',null, null, null,
1 ?+ M& c7 V5 Q* \4 I# }: I3 n+ `null, null, null);
% l: i* s1 m: n! C' v3 n5 y5 x简写为:9 o: L  {3 v0 H8 ^9 }
insert into emp_ning(empno, ename)( T  v, Q% H7 D& f) w
values(1011,'余泽成');; x$ G4 T8 {" B& e$ C" c
; A. C2 ~- }0 w2 T
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
+ Q0 v( C/ o% N. n- ?5 H/ l% rselect ename, nvl(job,'no position')
3 v& k, d: Z- @) J- u4 S* ?, cfrom emp_ning;
$ m, T3 }) `$ {
" `! q; S  V5 `# h- h5 D' ^2 C5 R查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
$ s" ]6 G+ O# ~/ Zselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;' Q, t* P1 R2 p5 B9 f2 S$ Q
. e* ]3 W6 x6 w) b' W
nvl(bonus, 0)/ y4 i0 b( O( e% i3 }
nvl(job, 'no position')
+ E& ]& \( J) I9 i' V1 dnvl(hiredate, '10-OCT-11')$ l) @0 b* N( U) b; v
! d! |+ Z; {2 o8 w' {* y. \
--复制表emp_YYY为emp_XXX4 p; e+ J& n/ G# s& W! C4 T7 _& t# [; k
create table emp_XXX
* F: r/ {# d/ F" p0 U9 y7 c; eas
. {( T: {& P2 N+ X; E  V: T9 fselect * from emp_YYY;5 ~2 @0 n  [2 I' J3 x& h
1 M1 H7 |8 F) Q& k" K
3. 机构中有多少种职位?
; w5 x, Q# `: F  n6 k8 v( wselect distinct job from emp_ning;6 W, T, Q% X  L& p$ N1 X- c3 G) }' ]

/ n+ n% w9 N4 w6 G% Z" C8 L6 P1 E员工分布在哪些部门?
& N2 L7 J4 s+ hselect distinct deptno from emp_ning;0 @. l9 V! N4 ^! q

6 a. L& m' L( Odistinct必须/只能跟在select后边。3 `6 b: ^3 B% e& L4 z/ Q
1 j& e3 G1 c4 T2 N- z- i( P
4.薪水高于10000元的员工数据?1 S/ n) m% v% M; R3 F. [
select * from emp_ning
3 b" l2 l8 w& p+ U1 uwhere salary > 10000;
" h; m: e. o! ^- _: M" {- f
6 K1 n# f& c# S  O" A  l& v" k$ {5.职位是Analyst的员工数据?% v  F8 b' c, V" T
select * from emp_ning: U$ T8 V- r! ]9 ?) L' R
where job = 'Analyst';
! w0 H6 \( O, v* i8 i: l, B& u% c* n9 M8 e5 ^  Q6 e. ?+ A, o
analyst  ANALYST  anaLyst; ~$ C2 {0 a4 [" ?: z' A4 N
2 I7 T# u; Z* ~$ }( ^* D% [
select * from emp_ning- v6 _' l9 I, f: v% s5 i0 L
where lower(job) = 'analyst';
% L; b! b. q+ {5 j. P/ f1 v  _
5 W) g7 K3 |. H' |6 m: N4 Tselect * from emp_ning
% w3 t& ]* F, iwhere upper(job) = 'ANALYST';
% ~& H* B% U* X; ~
5 a+ `1 q/ B% @& v! T% |  Q--如果数据是analyst,查不出结果2 ?( a+ H& V0 t; @4 g# t
--SQL语句大小写不敏感,数据大小写敏感6 M3 ~  o5 L% M$ c( ~# e, H  @

. ^# u# S% O2 n: {! i- V0 _0 ?6.薪水大于5000并且小于10000的员工数据
: H* Y; R8 G/ N% V1 r. t
+ P; {/ T5 B  }9 R) l: yselect * from emp_ning
6 k( k' `" e, \% W" |+ `where salary >= 5000
+ k; ~2 o. u/ i0 ^* ?( b9 Sand salary <= 10000;) k" \3 I. ?! M* E
  k$ D( m# G- n
--在区间中:between 低值 and 高值
; B# V1 P/ B5 S/ U3 @6 u( F--闭区间:[低值,高值]
; n  v' q0 q& R1 h& G, rselect * from emp_ning. y+ I' o7 ?% k9 G7 w
where salary between 5000 and 10000;# B7 e* O# }2 Q  Z9 I- [
; L4 Z0 x. t7 ]; p% _  w5 P! S( l% H5 L; M
入职时间在2011年的员工?6 v9 B; ?: y! ^, Q
['01-JAN-11','31-DEC-11']
* R0 r2 K5 G4 G6 M" `6 kselect * from emp_ning
# ]' t& p6 Q  iwhere hiredate between '01-JAN-11'
* B  V/ c- {  ?- F/ B0 N& N2 Vand '31-DEC-11';) R$ F, U. B. U

2 B- t$ ]( o) F7.列出职位是Manager或者Analyst的员工0 g  s: \9 ~. |

1 Y& D+ j! Y) Qselect * from emp_ning
. R; y2 |% h0 t) E% Mwhere job = 'Manager'
8 n2 M. o5 j9 |  S' l4 M" P, Qor    job = 'Analyst';6 [: i! {4 H, c/ S# ^1 Q
--等价:in (list),在列表中。
6 b5 v6 v% ?6 A" @1 C5 jselect * from emp_ning
" v; n/ k: X; E2 {/ F! ?; l3 w: nwhere job in ('Manager','Analyst');7 q% x8 E2 H5 l/ F0 _, A- M

7 O8 F9 @# S; R! O1 n" \8.列出职位中有sales字符的员工数据?
2 q8 ]$ b6 Q. w6 A7 s: vsalesman0 l7 [6 m+ D& R
sales
' ?  }$ {* `5 @2 C$ ybefore sales
1 q" K# V2 Q3 B/ Cafter sales
0 c2 C5 g5 \# \5 j; P3 Tbefore sales engineer
5 [- ~! |8 X7 m9 G
. g0 F; q0 t2 d  u3 G--%: 0到多个字符,跟like配合,模糊匹配
+ Y2 `9 G* e9 @select * from emp_ning. i9 E$ d) `$ i# f
where job like '%sales%';# d9 \; ~- ?; b2 [

: C: J$ p2 J( }; i4 L9.查询哪些员工没有奖金?9 n% J  P3 v% P1 S
select * from emp_ning' \0 y! s" h' f, `( j
where bonus is null;
) |. k; e9 G( `
' @3 W% S' x$ A0 D- o哪些员工有奖金?
8 c; D& `  f, g' x8 Hselect * from emp_ning
( a) F+ Y6 S* hwhere bonus is not null;4 B$ [- c* n( L1 S9 p& O# a( u
/ g7 i2 c( U4 L+ w! W
小结:5 d+ Q1 R8 a0 L' `
1)create table ...
! E1 j6 r# t3 B+ j  drop table 表名;! U  M. C. w4 x8 y. p( T, A
2)insert into 表名 values(...);
+ \- r; z) W. L! G3)select distinct | * | 列名 | 算数表达式 | 别名
: |$ _; e3 K( g: d8 [$ _4 ~8 K  from 表名
  X! s0 F1 ^& y/ Z$ g4 T  where 条件1 or 条件2 and 条件3;
$ ^0 z( o* D" S0 a. @/ t, S9 f. c  L( X; l
> >= < <= between...and... in like
! O" ?' u2 Y- {2 v
* s* U+ w/ B5 y0 i5 l

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


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

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

   

关闭

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

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