我的日常

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

动态微博

查看: 2102|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |倒序浏览
数据库: DataBase,DB2 g+ ]- u  Y+ @. W" F9 A
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
( u. i1 _. O) H' s8 Z' W$ goracle是一种数据库软件。% b0 ?, N* x0 d

) ~8 Q" y+ Q9 t/ z& F$ N, s& _Oracle  db2(IBM)  sybase(sybase)
$ l8 G- `  y' h. p* esql server(MS)  mysql(Oracle)* }9 Y9 J4 i  Q6 E" }
access
: D6 s* H# g2 J/ N! u7 m8 S# ^# T( G9 ]/ [5 g0 k* `/ T6 O8 X
数据库管理系统(Database Management System): DBMS
! D' g$ s6 f! o" B8 V/ \3 Q- @& s
9 o8 q% I; |6 E# F$ LSQL:Structured Query Language
9 X" m4 e& ?! h+ E8 E结构化查询语言:和数据库沟通的语言。
" J5 p5 J, h3 A7 _3 W2 G1 v- k8 Q( f3 q# l  ~0 r
DBA:Database Administrator 数据库管理员% m: X7 M  N% u2 o$ n
( D, D6 K$ S0 A; q* r6 i
Table:表:数据库的基本存储单元
, v9 u/ |# ]% U8 j: y横向:行,row,record
1 S- h/ H8 ], R, s  v( [纵向:列,column,field8 t7 h5 U0 c  Y9 H; P

# Q" r2 ?2 C8 V& A) [任务:把用户数据存入数据库的表中。
% q" t7 }) a% ], H/ y2 w0 `实现:. ^1 [( P/ Y! R0 z# X2 v
1.建立一个连接; N5 q6 t/ Q7 g; Y
1)数据库所在的服务器的地址:192.168.0.267 O+ |9 k5 E' n( `) Y% x
telnet 192.168.0.26
* m& u; j2 m+ g& X: ]3 z, g服务器的帐号/密码:openlab/open123
. q% K& b  c! V1 g9 N' P0 Q+ u, l  c' b2)数据库访问用户:
/ f. |% n! a2 j9 g) zopenlab/open123
5 y1 \" i. Y( }( y& H6 y5 a数据库默认帐户:scott/tiger
$ w4 \8 J/ N8 {; y1 i3)oracle数据库的连接工具:) I8 ], X1 r3 I# t
SQLPlus:Oracle数据库的客户端工具7 D, W% e' Z" E, c$ J
位于数据库的服务器上,192.168.0.26) G& P# l/ ]% y) D
$ sqlplus openlab/open123
$ b$ a( f2 w; X+ G: TSQL>
$ q/ c+ m0 h, n+ s2 N如果提示SQL>表示登录成功
# v! }% F# P2 R3 s6 k7 ^
; c) a, r; ~0 B' l# \; T
3 F8 Q1 _* W. b& d) Z: q# ~2.把数据表建立起来。% r3 F/ ~5 Y" \  g) d2 R( g, Y
定义数据结构:
0 k, D, k, B/ i! l5 r5 zcreate table user_ning1(
' [9 `) A3 V; p* @+ wid number(4),
4 q5 P+ P% J2 m' J8 apassword char(4),3 i$ J4 }# i- a" e
name char(20),
0 T9 V3 s* I; y+ b, z* Wphone char(20),
: Y2 C, t' E7 e# E6 d+ Memail varchar2(50)$ L% X# z* f8 @. V% o2 i
);
% a, j) y0 }9 R. {( m1 c- a提示Table Created. 表示表已成功创建。  P. x% |, G; i- Z: F6 M0 p. k

+ B( U) i: c$ E/ C# K+ p数据类型:
1 h% ]8 n; L4 Y8 U1)数字: * g( Z1 m% |/ `1 h  H* i3 T5 K; T6 P
number(n),最长n位
* i2 r$ s% {- z8 Snumber(n,m),最长n位,小数点后m位3 b$ {6 G  F& W6 U& S
number(7,2): 99999.99
. `; W5 D& H/ G( r: @2 H
. h' c" Z. v& c' H+ e+ |5 F8 u% ^. k2)字符串:
. o- w3 i7 s% ^: d' wchar: 定长字符串
* k8 p2 H3 X- r# bvarchar2:变长字符串
% R+ G% e1 B% q, V' [1 K9 ~, }/ Vchar(10)
4 Q4 I1 b9 u* r" L; Avarchar2(10)8 p" j$ h  w  \/ g
3)日期6 n: m- x* d# p' |( K- l7 t7 O
date
- |, M7 E9 R8 v( u- q, d( Y. _
0 X3 G: p' Y/ {4 H9 h+ a清屏: clear scr5 R) T8 }" T! q% G
+ V0 Z4 c  F. u- H
3.把用户数据存入数据表中。5 x  L4 X/ A# X- K/ v7 f3 D& N1 M
SQL>insert into user_ning1
* p' N+ L% g% Q/ l$ G. |- m2 D5 t    values(1001,'1234','liucs','13600000000','liucs@sina.com');6 L' k- o' a$ r! y6 |. Q

3 S. i$ S- W6 u5 J: y; ^0 l$ u; ]insert into user_ning1 values(1004,'1234','liyi','98765432',' \3 {( s4 o' h$ c# y! I9 T7 J
'liyi@sina.com');( u7 L9 [$ y6 E/ q4 ?

% C* F3 w4 L* b1 Q) h5 c 错误语句:
6 N$ G; f. _# _6 K1 ]3 G) i, Y, v' Binsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
  P( a: \$ {; l- E2 \# E, f: C4 ^  [5 U; k
三种SQL语句:
, l: }8 K" ~5 R- I) ~- g1)create table...
; V1 t5 h0 i6 v5 \: B2) insert into...values...' i7 ~8 k/ x% d% P1 t( }3 ^( E
3) select ... from...
+ k$ m8 C0 u7 ]( o
% x0 G2 V- P0 |SQLPlus命令:
$ N6 F, j8 L' [" c6 O' M- z% A" h2 @/ ?设置每行数据的显示长度:7 c$ y) p/ P: `
SQL>set linesize 200# l0 l  Y; W1 \& L: l2 m
设置列宽:10个字符6 f$ W, l* v/ E9 G9 y( `. W: H
SQL>column 列名 format a10
7 R  b8 c, p+ l! c1 w查看表结构:desc:describe 描述
5 T9 b) i, X7 ?! D+ _4 oSQL>desc user_ning1* [, }3 K6 i8 y/ j
8 Z) i7 y( b# {, V) o- I
规范数字宽度为4位:2 q, e0 q% w6 }0 p3 }5 I" ]# N
SQL>column id format 99992 y  G5 A  X& B+ b' }7 v! ~
简写:) ?) U6 _6 g2 e" \: G, I6 V
SQL>col id for 9999- k) l& ]- E. k2 r  w: V
# O2 }' p1 \* v& _. e
--*表示查询全部列
8 ?7 j& w/ t; e9 G" Z  L2 p% R! Wselect * from user_ning1;/ K+ c$ D9 O- {/ F( H0 i
8 ~4 ?( M" j* K' {8 s6 k7 ~7 v7 c; S
select name,email from user_ning1;# y9 J. d, Z0 v
0 y9 k3 S6 l  b
--查找1001/1234考生的名字?6 X& F6 I0 b! r
select name, email from user_ning1
! [. a9 H1 e1 m, T, Bwhere id = 1001 $ f" r* A! k/ |$ }, r- V
and   password = '1234';
1 L! s, U+ E: i2 i/ D6 j( C" A! Z2 {1 S2 m, }$ Y! t
数据准备:
+ Q) H* s) t4 J2 n1.表dept_ning:
+ _/ P( q; Z  W0 ?# G+ tcreate table dept_ning(& I  E1 s' k& A: Q: d
deptno number(2),8 ^7 g$ e1 r. S' D
dname char(20),
) `* |: h+ e! glocation char(20));
& i2 l, E: z  M8 m0 D* ?" S3 u2 [& Y9 `5 B6 B( y+ G
drop table dept_ning;
" c: {. u0 Y! M  D  l
, O+ |% Q8 {9 u0 N- d增加数据:# V( T! a+ d, n1 @8 Y% e2 ]2 x
insert into dept_ning values(10,'developer','beijing');, l' i$ z5 S4 R/ M2 l4 o
insert into dept_ning values(20,'account','shanghai');
3 H2 k1 ^; c1 h+ r+ G% vinsert into dept_ning values(30,'sales','guangzhou');; b2 }6 x& t! ]+ J
insert into dept_ning values(40,'operations','tianjin');, J& H- p+ X' g/ l. s; w

. `4 [0 F! G% @3 L/ ocommit;
( @  g( l( B! M
( n/ G: v: B) \0 i  i, h/ lselect * from dept_XXX;
( h2 f+ K; @" d8 I/ b5 {% H$ N8 \0 F% q" A6 d, P
2.emp_ning6 D( x' b# b' n8 `2 `
create table emp_ning(" B0 Q! U/ O% o- w9 }, r
empno number(4),3 k$ P8 L* @  [4 ~; G
ename varchar2(20),
+ T3 z! q9 D& B+ A& ?job varchar2(15),' ]  E$ Y: w0 n0 ]# G! o7 m0 C
salary number(7,2),
6 m! {; |- n9 j2 J4 S) nbonus number(7,2),8 C/ U+ q* N/ [6 K# Q
hiredate date,7 }( w7 v; k: P) \
mgr number(4),9 P) Y* R% T. {# P* R  t- G
deptno number(10)4 U$ H# Y5 `) a) m! E' N0 j
);5 S- h5 Z3 C; e8 y0 q$ F6 {
1 t& B4 m7 o, F" {! H, k9 w
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);1 |' n8 ?6 ^+ y3 U. p- m% `! W8 g
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
4 T+ `& s0 r- e3 b* a0 e9 a- Dinsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
+ i7 B' o$ s* c2 J4 u2 binsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); 7 A9 u1 w+ _( K2 s# f3 l
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
* [* T# B$ v3 ]6 ginsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);5 v/ l1 V. Q7 i4 x. x; O' [, j
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
/ G1 Y3 ~2 p+ ?- j6 qinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);/ p- ]$ P+ y! A8 J8 c- H
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);7 ^) A7 E% p0 a% _+ {
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
4 C2 Q/ v" P2 f, }+ K  {: M4 n  E
' [, ]9 e# U& G* kset linesize 150
# I! o: W2 G* A1 W* dcol empno for 9999
) h, c% f4 B+ U4 X& k5 Kcol mgr for 9999$ i8 z8 N4 Z& O5 Q# i7 d3 ^
col deptno for 999 A+ d4 Z% X/ F/ s  t3 J- [
col salary for 99999.99. d3 L' E+ s+ H5 m& o; }; d
0 @5 o  Q7 }7 K# q# j  a# o9 I6 t
select * from dept_ning;; b6 ]; R. V/ ~9 b
select * from emp_ning;+ z* i7 ^$ ^* ?0 x

# Z# O% P, J& s7 N* R1 ?一、学习查询语句。3 h2 Q$ {4 n) D( O1 ]. R9 K( p7 F
1. 计算员工的名字、月薪和年薪?
/ G3 Y6 s# c/ D$ ^2 O3 [% Iselect ename, salary,
7 i0 S2 [; c* u% J, gsalary * 12 year_sal
  N5 Y- E3 ^1 S6 b# v' _from emp_ning;0 S+ R7 m0 e7 O0 z; l  y% f

% z4 ~* {. `9 @% B0 C. G/ R' z& }2.计算员工的月收入?- _2 S0 o" j( l) G" |
空值和任何数据做算数运算,结果为空(null), O& A  P( N) f  m+ N
select ename, salary, bonus,
3 M( s: Y4 i7 p- W3 e0 A  r0 ]9 G       salary + bonus month_sal
. A/ Z! o- d8 O% Z: U5 jfrom emp_ning;
$ B8 l( o) ]* H6 o8 e$ ?; I$ S5 `3 B& ?+ ~) s  A" V
select ename, salary, bonus,7 h; b0 w3 I! n  W
     salary + nvl(bonus, 0) month_sal- U& o/ M; j! ?- z
from emp_ning;7 C* b7 C7 W' E6 T" r
3 F- Q6 H& O# ?( ?
public double nvl(double d1, double d2){7 Q4 `. |2 m. [. Y" m6 P; w
        if (d1 != null)8 Y( w8 S0 T; r2 ~1 t' N' @$ e+ p
            return d1;( R, {1 T1 a3 w, w* ?& M
        else 3 p, q8 _8 F2 V
            return d2;      
' v  Q0 [0 E3 M: W! |  b$ K0 X}$ I5 I9 p8 s5 c9 h5 l: |# \
public String nvl(String s1,String s2)0 C  J5 y! ^5 P% e8 f5 k6 F' U) Z- G
{
4 h; E% i% R3 I; q        if (s1 != null)
/ U- |7 J* A( p+ ]                return s1;
. B1 N7 f' [6 b        else
- C( n" q: n8 _% I: u9 I3 m                 return s2;
/ ?9 p! J0 K5 C' \1 |}
; F! N  V* |$ M3 O/ T- `public Date nvl(Date d1, Date d2){1 t. F* T* c! r2 K
        return (d1 != null) ? d1 : d2;
7 c( L' j( J; g9 E0 h1 a& {}& [; ]1 n* Z3 ]# l. X9 t7 z

2 W0 K( I+ U" |insert into emp_ning
' X, a( X, ^0 R9 J3 ?1 `4 _3 Jvalues(1011,'余泽成',null, null, null,2 ~( z6 h- P) z1 ^8 q6 g: b. U
null, null, null);" a. \  x5 i1 ?5 P: c( j  u& R8 ?
简写为:. q8 D+ m5 {" H' i1 y& x3 F" @
insert into emp_ning(empno, ename)8 f* b& ?& W3 W, }+ p' N+ H
values(1011,'余泽成');
* k8 M7 k- Y5 d/ [# ^9 z
5 u0 w; s3 {9 \9 o7 ~9 X/ s查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
, n$ `" I# U; p* h& I/ J, ]# y9 aselect ename, nvl(job,'no position')/ U; j& j1 Z% P3 A& b# {% ]
from emp_ning;+ Z5 D9 n; w! g5 y3 X

, @) {4 V3 t, S5 A% X查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
. A! d# u: w# D( i1 U: pselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;6 W1 b7 R8 j. x8 j8 a

7 Y# E# z! _* ~: H8 bnvl(bonus, 0)% h0 f7 P0 Y' N+ m* \
nvl(job, 'no position')4 i3 ?4 W4 ~! `5 Q' a4 W0 G5 S4 t
nvl(hiredate, '10-OCT-11')  O  {9 \3 |4 Z/ F# v! M

% {0 Q# F; Z$ T" U1 l& w. O--复制表emp_YYY为emp_XXX
* ?8 [5 y) n) k4 {create table emp_XXX
- v) E# k+ b& ]  f. P0 Tas2 I) ?  A# e7 W6 @+ u% \+ b
select * from emp_YYY;
" u% e1 b5 w" L
- V( g& _0 f3 c& ?' |! g8 y' p3. 机构中有多少种职位?3 `& g, h' p' A, w5 G4 [6 e  p# l
select distinct job from emp_ning;
: T, Y3 x! m9 n+ ~/ h6 M
1 h* q7 N/ S- s$ P* P4 ]员工分布在哪些部门?
' X% o6 ?% x% w$ }" v" H$ N) r9 T  zselect distinct deptno from emp_ning;- m9 ^: z6 G7 S5 d9 n6 q4 }

- X% l- b+ @/ J/ N8 F* K( Kdistinct必须/只能跟在select后边。: \( D) C' z/ Z) i& y  r: z2 q
* W) A" f8 S$ W( @
4.薪水高于10000元的员工数据?0 l2 }# T' ^9 J! d  v4 X* G" ^! e. D
select * from emp_ning& D9 e! {* Q1 x& g( g$ I
where salary > 10000;
) e% G+ z% n5 R# Q
5 K9 R9 \3 X- P6 [5.职位是Analyst的员工数据?
  b  ?% t' H! p  S' _0 ^' gselect * from emp_ning
- U0 `/ g8 T/ {* L4 A2 A2 Vwhere job = 'Analyst';7 l( }7 c. ^; S" Y

  ]% L  Y9 `+ @- Danalyst  ANALYST  anaLyst
+ ?* f9 Z! B6 C7 \2 C; p" x" S$ J9 S# E2 O
select * from emp_ning2 ~7 X3 s$ Y/ D! N
where lower(job) = 'analyst';4 N( `8 [% N7 o8 c

1 S; E8 q, s. W% u2 ]select * from emp_ning' V; K1 w& p2 g) h& p2 W
where upper(job) = 'ANALYST';1 {8 N! F$ V4 }& @4 |+ P2 Z
$ u( V( i% w- Z/ ^5 R  z2 I' `$ }
--如果数据是analyst,查不出结果; U  Z) M) E& f2 y) q' L
--SQL语句大小写不敏感,数据大小写敏感# _: Z2 m) I% [3 ^: o& V$ L

1 D7 y+ }; _  Z  p5 d* f6.薪水大于5000并且小于10000的员工数据$ M# v8 h! U" ]3 p+ e% t) }$ Z8 f# Z

0 d( Z5 j' Y& l9 ^) ?( I: Zselect * from emp_ning+ V( ^, F  I" h1 h- D+ A& G
where salary >= 5000& v8 e+ r! x% x0 w
and salary <= 10000;( @2 S( i! O6 B* l8 V' e6 P5 t
6 K8 {. M3 l" T2 t1 a
--在区间中:between 低值 and 高值, b/ a; g( C* r3 s, a. Q9 z
--闭区间:[低值,高值]
4 x5 h$ F5 Q1 _- o4 Vselect * from emp_ning, l" k) W3 M3 c4 [: X
where salary between 5000 and 10000;/ p3 W2 V0 r8 V% V+ N: W  \  Y

8 l5 J- F$ M: d& ]4 r4 V入职时间在2011年的员工?
' V: `7 D$ M% N['01-JAN-11','31-DEC-11']+ L# ~8 b9 j1 x9 k  k  R
select * from emp_ning
  h+ Y6 h0 s) g; [where hiredate between '01-JAN-11'
/ j1 Y. Q; j! ~! Band '31-DEC-11';# J7 L' k' L! v5 `/ K
5 _  y6 M+ p; M0 @! }  P  C" k" V8 k9 X
7.列出职位是Manager或者Analyst的员工
  f4 L5 g7 m; Y) M0 c* a
1 z$ x8 ]+ y+ Zselect * from emp_ning
2 i; Z+ T- R; S8 D* d/ F, j* ^where job = 'Manager'
' F4 r, W* a  x( w  B' A' ^0 `or    job = 'Analyst';6 D1 e3 `! o# s: B! Q: L0 K
--等价:in (list),在列表中。# |( W/ x, k# h" J! K1 h2 [3 S
select * from emp_ning
1 Z/ _, y' _/ U7 J- X" iwhere job in ('Manager','Analyst');& A& b6 H( ]- B/ Z) {

, l3 d9 m7 q* U" ]; G8.列出职位中有sales字符的员工数据?9 g1 p  Z8 B7 a8 o5 L
salesman' K. c2 O9 R" ?/ X
sales0 @' d9 X: _$ _4 U
before sales. Y- u0 a5 f. T  c4 @( r
after sales5 F$ Q( u& S( X, b, b) \9 s
before sales engineer
# \. c2 @2 V9 Y1 A
- j' I0 z' h" N1 O9 U7 M--%: 0到多个字符,跟like配合,模糊匹配
9 m7 _' |+ g- A' k' T0 Xselect * from emp_ning
  L" _5 j3 r" N5 F2 b) o7 |+ Kwhere job like '%sales%';; P$ P) f3 H( u5 A' J

' q8 ^3 e. m# d, _4 E) k0 |9.查询哪些员工没有奖金?
: A/ |/ V3 T1 z' d9 }( Hselect * from emp_ning
7 K% S% ]* \3 Pwhere bonus is null;
* c5 z$ Z2 ~4 u) A3 t' q& h9 a0 o' o. s' e$ O7 I
哪些员工有奖金?1 @) b5 x% x/ I" |8 ]
select * from emp_ning& M0 q2 b& N2 T2 b; ^
where bonus is not null;" U4 _) W$ [& V+ r/ f9 |# B0 J

: \' {6 ~7 i  H5 Y3 U5 q小结:
8 {; d6 \  b+ Z9 W6 B; p1)create table ...
: M6 j* U' q  ]$ M  drop table 表名;
3 B! N& z' L- w& a' S2)insert into 表名 values(...);( S! i' F) H1 @8 x( L- q9 E
3)select distinct | * | 列名 | 算数表达式 | 别名
* B, }. S% c/ J4 ~' t  from 表名
/ M+ {# J" |, B. i6 ~  where 条件1 or 条件2 and 条件3;$ v9 O; [' Q5 `: _9 X  A, ^

) {9 O. r5 ^0 k4 Z4 d$ }- C> >= < <= between...and... in like- ~2 @; \. F4 K4 ?- g# P
6 H* u3 D3 Q' E1 }' j1 l& G1 m; A1 Q: s

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


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

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

   

关闭

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

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