科帮网

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

动态微博

查看: 2257|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |倒序浏览
数据库: DataBase,DB# E0 {; {/ S5 j
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
" a+ D! R7 ^% J  H, u' L/ Roracle是一种数据库软件。
1 j" I' j: s7 k( _" X  w! Q
: M( m1 r; |& M3 ~) \) s6 C5 }+ OOracle  db2(IBM)  sybase(sybase)/ b; K/ k, R- X( b& O+ |
sql server(MS)  mysql(Oracle)" ~1 W* I8 M, B5 G
access
$ h9 B& G% |9 Z; o% ?2 r& B
9 w6 Y. Z# E" b- R数据库管理系统(Database Management System): DBMS! Y! H, O2 x! |  c2 A# `

; m; k/ L( }7 J3 t6 ~% USQL:Structured Query Language
/ x; k2 R: _1 D( w: |结构化查询语言:和数据库沟通的语言。
+ V6 ^* g0 }. x0 B5 L
6 |. ]  B* F1 O( L1 O, M; L, {8 X" VDBA:Database Administrator 数据库管理员
" |$ J+ R; k! d2 h% F7 t, K; J
7 t  b. g. E+ V. T8 }Table:表:数据库的基本存储单元4 p) B# C# z+ |  \; x
横向:行,row,record
" |: |! H& s: J( i! a& u纵向:列,column,field
- {1 z) a9 L/ \9 T" n$ k, ~/ d% e+ m+ I$ q9 E+ X& g
任务:把用户数据存入数据库的表中。* [! s( A, H5 i5 m3 e* n4 t! O
实现:
% M5 A2 ^% m7 g6 t% B1.建立一个连接
' [! Y* A* S7 M7 I+ }+ B8 x1)数据库所在的服务器的地址:192.168.0.26
+ u4 n; U( I2 H7 T2 atelnet 192.168.0.26
! K1 D* a% Q& a  X服务器的帐号/密码:openlab/open123# F' U! n( U' g- V3 {* Z
2)数据库访问用户:; m6 y9 L' c. d5 m- h! g
openlab/open123
! C! Z, ?6 Q- ]- K数据库默认帐户:scott/tiger
8 e6 M* o. X0 e; G9 P! l3)oracle数据库的连接工具:- }" W9 Q. w: p7 M9 o3 Z- X2 Y1 d
SQLPlus:Oracle数据库的客户端工具! W8 E. S$ X7 ?3 k8 }
位于数据库的服务器上,192.168.0.26& @& z% e) R  ^* q. @, A
$ sqlplus openlab/open123
1 z5 m7 H6 a6 a5 g& c  s, t) U' a3 |SQL> ; z) L: M1 i5 K- n6 ?4 a
如果提示SQL>表示登录成功; W& e2 ^8 v3 D( W- ~

0 F' \! [2 m9 i2 t7 x2 {- h: B
# e4 l" _6 }* b2.把数据表建立起来。: p* Z' h% D7 |0 T
定义数据结构:
' s  A! O3 R2 y- s* a8 N1 Q- [& ~create table user_ning1(
( ?# k; k: s0 _id number(4),
$ V7 _/ O8 ~& ?' U7 @password char(4),
4 s- b! e* ]! V0 U# v$ l4 B! }name char(20),! F3 o6 n+ C: H# i6 b
phone char(20),
& [; X% M% f, n$ Demail varchar2(50)
" p0 k9 p, B6 A% W);* m" O4 w5 i7 U+ Z# a3 g
提示Table Created. 表示表已成功创建。
+ a) H4 z# k1 m/ u/ |8 E, J: r* I% G/ S" A# `0 S9 l! I
数据类型:* s$ u0 f: W) t8 t1 }. E
1)数字:
( I/ R! a) ]% k1 f" n% knumber(n),最长n位0 L  Y7 z. m& Y
number(n,m),最长n位,小数点后m位4 d! p) o* P- u- A) Z
number(7,2): 99999.996 @6 n6 g- V0 A/ k

) g& L; a5 h# `2)字符串:
; N8 h, e+ F7 achar: 定长字符串
  y" y. K+ W0 x4 ], q& q4 S7 {/ u9 Evarchar2:变长字符串
3 b7 b- V! X# t9 }) Xchar(10)
7 E. \% ^4 g2 H/ O; J2 K6 Y$ t; bvarchar2(10)
# c) c' Y# v$ C: s3)日期
. M! F; Y6 y  s  _4 Ddate
  u, i( t3 O4 J, T8 F
! F6 M. l2 r: v7 ^清屏: clear scr
. Y$ F+ U) }  T2 R9 m, y. K* Y- S/ y# w
3.把用户数据存入数据表中。
5 W! a3 @6 c1 s  q' U! C' G) C. KSQL>insert into user_ning14 e/ B" h' i; ^7 y
    values(1001,'1234','liucs','13600000000','liucs@sina.com');/ @/ y3 h6 W+ i8 G) z6 F
8 l3 M/ B5 E! B7 e1 _- ~8 x
insert into user_ning1 values(1004,'1234','liyi','98765432',
5 [) W- I: k" A& M'liyi@sina.com');6 D: ^& F; M8 p  V5 w
3 C3 f+ s5 j/ {& j# K9 z7 ]+ l( v4 }+ T' W
错误语句:
: B! d2 K, [. j7 z. D. s/ m; A( y; q+ Binsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);3 m, L* y$ _( H

- o3 V5 f5 f. x: q: {4 d% ^三种SQL语句:: r; K& C. A% P6 m- m5 N
1)create table...; k/ f: S  D4 \7 K
2) insert into...values...2 P( G( ?& G# Y, u0 b
3) select ... from...5 v+ @7 _, K2 \7 b
8 }1 ~6 N6 J6 S, a
SQLPlus命令:6 \% V6 J2 W$ H
设置每行数据的显示长度:
: W% b3 }! I* u4 ^SQL>set linesize 200
$ F5 }9 }4 L3 d3 c2 r$ i4 l2 n设置列宽:10个字符- ]5 h$ m; ]3 F8 x
SQL>column 列名 format a10
3 e+ W6 p% b& q1 o( ?查看表结构:desc:describe 描述
  j7 u7 q8 }  t+ l( l. l$ vSQL>desc user_ning1- J7 C9 K' F3 f* Q7 O2 t
! v' l) F+ i/ a& D" D
规范数字宽度为4位:
" w, V8 d. n$ P# b, n' Y: [SQL>column id format 9999/ c4 Z6 ]1 g# ]; p: t! [, W" A- e
简写:
/ p3 l# ]; l( S6 U) T7 lSQL>col id for 9999
0 K$ E: V9 z6 h+ P! q2 |* r( |, y7 y5 v( g( h
--*表示查询全部列
, D$ ^2 a7 E" \1 B8 ~select * from user_ning1;
4 c; l+ _( q: H) H) n! F+ r8 ^9 `& P" e2 N* w9 ?# U6 ~0 o# J
select name,email from user_ning1;8 R& i1 c* S8 k9 O
3 U4 ^# i6 F5 b9 A$ R
--查找1001/1234考生的名字?
$ |5 C0 P; D. S) ?& {$ {select name, email from user_ning1! S! B, r( b7 K6 ]% F- M) U
where id = 1001   }0 x. {4 O. h& x* o
and   password = '1234';- K4 j+ i3 ^# b2 ~+ h
6 K5 P' W0 s4 `& U
数据准备:
# @! s5 N; h2 D; ^8 L- j0 J% ]1 t1.表dept_ning:
$ Q, _/ s9 E& z$ @( Y7 K: Dcreate table dept_ning(
. A- I, x# b$ @5 P( ndeptno number(2),, V+ A6 x; ?8 W& t$ |$ V* l8 B
dname char(20),1 p6 _0 K. ~1 a
location char(20));2 b! O- J5 K8 G4 r2 m0 s4 Y

3 }' `1 n. m& ~9 Jdrop table dept_ning;
4 l* I8 Z0 h( q3 I5 [: o' K
) t( z1 o5 o0 M' E8 M增加数据:& L4 V. c9 Q! U, {
insert into dept_ning values(10,'developer','beijing');8 ^9 L$ R2 h  s. G* m0 Z
insert into dept_ning values(20,'account','shanghai');
) ~# V' H7 j* finsert into dept_ning values(30,'sales','guangzhou');
" b. @: ^6 N! Q* x& U: B  D. @insert into dept_ning values(40,'operations','tianjin');7 a: j6 a- e  l; v' l
# ^& J& q0 P+ o; {0 ]7 T# y
commit;
3 L; a# y. B( e1 _$ ~% I6 s" k2 X- U( l0 k8 G
select * from dept_XXX;
9 O% U! k, f& F% f: D8 w! C) Z* C$ H$ U: E4 B; d. L
2.emp_ning
+ n* Z8 L! e4 ocreate table emp_ning(
% }  |" P) g2 l- s# A1 D8 j) Jempno number(4),
( F1 ~9 U% R) ]$ Tename varchar2(20),/ [0 I  H) V+ v$ c, |2 N0 Q& E
job varchar2(15),
9 }. m* N9 H1 \% u  l9 y, Nsalary number(7,2),: @. {9 |1 b* @( @3 W3 \6 }
bonus number(7,2),+ w9 L" T& A0 j0 Q
hiredate date,5 l, Q( X$ K; f8 w- i. b6 m
mgr number(4),( f0 X2 U) |' T' }! E1 X$ G, i/ _
deptno number(10)# d9 ]. L& n: O& g* f% ]
);
$ A- k3 e7 J$ J  @) R: l, o
0 ]! s5 [: M. M/ G9 U8 E1 oinsert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
9 I% B! C0 y0 P& z/ |* hinsert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
, ^5 T: w$ x; f: S2 Z# J  finsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
; `" A& ^2 H6 h4 `# ~+ `4 E6 minsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
6 w1 \- c) l& F- x% Winsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);6 |- |- [5 ]5 @3 C  t! J; v% `( N6 C
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
- j! f0 U: ~- m7 ]' w2 h2 y0 zinsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
/ g! w# Y( c5 cinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
7 O  a5 B% G" Ainsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
3 p& d$ C$ X' K1 o8 L5 xinsert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);% C* E6 }. ^& x. P0 }& S# x

" `8 M- N3 D, m0 U; oset linesize 150/ p! _# u, e8 `# W
col empno for 9999
+ N% K  r7 o! ~" rcol mgr for 99992 {; @4 Z# C: r& @5 K7 Q$ l* Q! D
col deptno for 99
- n4 Z% l) I% d( J1 Scol salary for 99999.99
( D. {! `3 |; \
2 `0 ~/ l' w7 z' J8 Q4 D. Vselect * from dept_ning;  Y" h( n/ K3 l# X; k) i
select * from emp_ning;
1 `5 J; }0 r; k
: b* ]  o4 L5 v- i4 m7 y一、学习查询语句。
' }( T! Z2 K2 i/ i. j; M8 E- c/ g1. 计算员工的名字、月薪和年薪?
1 M  A/ O. \+ v; q+ mselect ename, salary, 7 @, R) S( ^% Y  x3 |, c, q
salary * 12 year_sal
6 k% i7 D5 ?* z! ~! {! [; Kfrom emp_ning;% A- c; N- [1 A! r( O( l

' p! T' S; d$ ^, |/ B2.计算员工的月收入?
- U; ?/ w0 F5 V9 y2 }1 G空值和任何数据做算数运算,结果为空(null)- W# s7 `4 s6 O: `
select ename, salary, bonus,4 `6 z* g- H; p' w' S& Z
       salary + bonus month_sal. k  w/ b! N2 a0 {5 F, T) B3 Z- ]6 L
from emp_ning;
! _" l- u+ M  `4 k) ~5 W! P- ?: [: c- v
select ename, salary, bonus,! n- b$ _5 j( [8 T! h3 q
     salary + nvl(bonus, 0) month_sal
( z! x/ D# \* Pfrom emp_ning;
, p- {  i/ m+ [8 v. i
- ?; K; }* V  ]) x9 M/ d# d+ Gpublic double nvl(double d1, double d2){
7 W+ w, c5 i% w- F% ?8 j' c6 a+ g        if (d1 != null)$ U2 Y8 l9 p$ O
            return d1;
+ R, i* |% P5 w: m# u( e        else . S1 f( y( u- s# |, S, f! y# k
            return d2;       . h' {! \% r2 g5 S# Z
}
4 x3 e! V5 y. bpublic String nvl(String s1,String s2)2 ^" m. a5 C& {% W- e, X' p3 ^8 u
{0 I& |/ G( }8 W$ s
        if (s1 != null)
: P! i  q3 F7 a# l                return s1;
+ J( f$ F, }/ w/ H7 Q0 M' t6 }        else9 c' F( l$ o* C6 G
                return s2;
3 D" g/ j; u! y) F; W0 S}1 x. j9 @" T5 }5 P
public Date nvl(Date d1, Date d2){, z  y7 ]8 ?7 k' F8 E; k
        return (d1 != null) ? d1 : d2;
+ m/ e4 N1 _7 F8 F  b}
5 E& {/ \) @5 D' ~' Q  E7 Z
! _& h. {5 w( t4 o' x+ Z" H1 `4 Einsert into emp_ning
) T" |$ m; X, ?  Cvalues(1011,'余泽成',null, null, null,' @2 g# P5 S4 T2 c
null, null, null);: ^: w. A3 W" P6 Z) T. G- l
简写为:3 X( H3 d$ F5 i- l8 C/ t9 p
insert into emp_ning(empno, ename)3 m/ @4 T  O& [& k1 g* e
values(1011,'余泽成');
3 G: v# C- v5 W9 O: Q  w$ O. ~" x" J$ @/ `
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
/ X" v# t4 P8 H, |select ename, nvl(job,'no position')- e, f1 u. D- s6 M' K1 i3 ~8 Q
from emp_ning;
1 a/ R3 g1 @7 u; b" |- L+ W
4 z/ C' L5 @- i7 b6 s$ P# a查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。1 R4 l& q8 L5 w1 C8 q' e
select ename, nvl(hiredate, '10-OCT-11') from emp_ning;
- R. P: l4 o3 |( k/ k" o4 Y5 g" s; d- l0 K2 D# [9 V
nvl(bonus, 0)
; q& V7 E8 _- m4 hnvl(job, 'no position')5 r; @+ B2 j% ?) p: a0 \
nvl(hiredate, '10-OCT-11')7 c) |& B, o1 W) Y  z

; ]) P- b7 y, r" T' s+ y8 ?--复制表emp_YYY为emp_XXX" W2 C; y/ ~$ t3 Q
create table emp_XXX
, g& S/ o$ U9 T5 F9 das& Z& {& M& J4 b( i5 a9 b
select * from emp_YYY;
$ K- E* A6 h+ o. ~: `  T
1 Q6 A+ P8 |, S3. 机构中有多少种职位?' r( @; \- O/ E4 U- V" |
select distinct job from emp_ning;0 v0 `" _0 V) M1 f

! ]6 `- H6 y1 G( J# h员工分布在哪些部门?
! i& k4 N6 N" o- [' n2 I' V, w( ]4 W. Qselect distinct deptno from emp_ning;# C8 i2 n* p1 d2 V5 R
, l  I: }* E. I" {3 L" r
distinct必须/只能跟在select后边。
7 {( x- w1 z( A* c7 W" q$ _/ n9 Z% N9 `2 @  K. J7 r
4.薪水高于10000元的员工数据?2 z5 S8 Q# E3 Q  m- f
select * from emp_ning( a7 e2 x5 q3 [, G
where salary > 10000;
( R! O3 [' o" t3 q1 l8 R& o
: Q# Y: h9 t' A. o5.职位是Analyst的员工数据?
& o) M" N! e5 xselect * from emp_ning
: Q) Y; r& ?0 c* uwhere job = 'Analyst';! i3 I6 r3 C, q  B( T

. x' Q) Y- |- h4 kanalyst  ANALYST  anaLyst" m' q6 B5 Q7 ^
9 v4 j! S' G  Q' g4 W; h( C
select * from emp_ning  W9 B- D- O% @9 x% _. V
where lower(job) = 'analyst';
: o3 M( `4 |; u+ T, Y/ C1 U5 n0 S( n: g; _8 g2 K4 m# r- v
select * from emp_ning
9 X8 S" M8 }1 Z) F6 s% Z) [where upper(job) = 'ANALYST';) X  x% D6 g5 [( b
5 j+ g8 H& [. h" \/ W/ W
--如果数据是analyst,查不出结果% @; b) T: s! k8 L/ `
--SQL语句大小写不敏感,数据大小写敏感
" X+ c% J6 D" O  d& m8 t. m, a' x2 b" X: U0 B/ ^
6.薪水大于5000并且小于10000的员工数据  r- S1 x, F3 `

0 e( n3 Z) x5 Z% d  J& Gselect * from emp_ning
( \3 U! V5 Q5 B5 z' O0 m# Xwhere salary >= 5000( Q6 O3 v( K3 J
and salary <= 10000;
6 x0 M7 D- w/ r+ h! _# k/ U* y
. W( y2 n1 A, [1 F8 A9 w2 q--在区间中:between 低值 and 高值
# S, M' l: x. L! ]6 |7 W2 ~--闭区间:[低值,高值]: y- s! G4 `3 \) V9 d* |* U4 q
select * from emp_ning* ~9 S7 c0 I% D" |/ @$ w+ F5 `
where salary between 5000 and 10000;' [1 ^" h  J  ~0 r7 P) T% c
: q( s! O9 x0 c
入职时间在2011年的员工?$ s9 y$ ]) o8 |- s
['01-JAN-11','31-DEC-11']
* W' }6 a. m9 V3 w% {# yselect * from emp_ning
. P( u4 R. l3 J; M$ Twhere hiredate between '01-JAN-11'* M& ?" k, D& `. n( Y
and '31-DEC-11';4 b7 T+ B. |- A# S( Y6 ^
) A1 S, \& m5 x9 f$ T9 f
7.列出职位是Manager或者Analyst的员工
8 m: P9 A* {; L1 W8 ]' |" m5 T4 F4 R4 h* r& u
select * from emp_ning0 O, _2 w, }% @' Y
where job = 'Manager'2 p6 K% X8 t+ `9 @5 d
or    job = 'Analyst';
* k9 J1 U9 x# ]9 m  u; C! i. G# `" h--等价:in (list),在列表中。
- m: t/ v  y5 V4 k$ hselect * from emp_ning. ?, T' l6 M9 G0 E& C7 w
where job in ('Manager','Analyst');7 I- x6 H) ]( C  P6 D/ m2 S

# K- p2 L- f0 U2 L4 j! |8.列出职位中有sales字符的员工数据?% t! [0 |% ?& r& W* V& ~
salesman
  y+ D' k7 j1 F0 s; S7 v0 Y1 rsales: \2 u& s% l% ^& K0 b; A) `0 [
before sales
6 G  ?( R: t  }1 M+ R9 ]after sales
4 J/ }1 Y  F7 f' jbefore sales engineer
7 @: Z6 I9 }  e* T+ s) k! G7 a! |
( q1 R. f- F& ?. C/ ^- k. y--%: 0到多个字符,跟like配合,模糊匹配
( F" L6 R* A& n0 n; p% w  ]" Q3 Bselect * from emp_ning
% L- P+ }* }! ?5 R; w2 swhere job like '%sales%';
* ]- s9 j8 H3 r  S- I# W& v( n6 ~) U2 q( s* ]
9.查询哪些员工没有奖金?9 L, X4 B  Y; ~* ^- Y
select * from emp_ning
6 G) N- O+ o  G$ F0 O) A: Owhere bonus is null;1 z/ H0 ]/ A7 f3 h1 Y+ l
8 G6 q, @: Q2 U: h& B
哪些员工有奖金?. I: g1 X  O9 t2 |2 C+ X
select * from emp_ning! k0 L1 ]: r4 E0 v, ]8 n* x
where bonus is not null;
& F& p* x: }, t( o, q# |  x, D0 i
( M  N. Y! c1 x) m. a. j$ `& \小结:
! f- ?7 n4 q* S5 ^( Q& v, I1)create table ...* I$ B: h* W, ?0 G$ T" H
  drop table 表名;
0 r* f! j+ {( Y, k( D! X) l2)insert into 表名 values(...);
! @. G* H1 ~) S( ?7 v2 `- P3)select distinct | * | 列名 | 算数表达式 | 别名  `# H- D6 Y2 u) Z" g6 i0 |
  from 表名0 D' l# t5 B" Y: m. p+ ~' F7 k
  where 条件1 or 条件2 and 条件3;, c/ j+ M# b" s

$ {* n+ C7 A0 D0 R/ f. Q> >= < <= between...and... in like3 O' e8 X6 g* l# }$ j- [4 |

' v0 [% g: ^+ z+ V3 T7 a- ]6 q; }; ^6 w

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


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

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

   

关闭

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

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