我的日常

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

动态微博

查看: 2099|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |正序浏览
数据库: DataBase,DB
8 [$ A$ @8 b  \4 ^0 E存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。) B2 s( z. P$ d+ a
oracle是一种数据库软件。
, y0 j. I$ r5 d/ p3 ]: D9 {6 Q9 p6 q" z( @# G/ y4 W8 l: c6 @& o+ }8 @
Oracle  db2(IBM)  sybase(sybase)
- S% n' }/ ]3 Y! d( U+ Usql server(MS)  mysql(Oracle)
; z2 y0 `+ u5 uaccess
0 r3 b% J) w* \% w  O) X0 {* k5 c- D: c3 z; V+ R1 l
数据库管理系统(Database Management System): DBMS+ V1 t0 C7 V* z- q$ `2 Q, f- D
5 ?$ f) z) u* k
SQL:Structured Query Language
6 F: g- V0 Y/ r- f结构化查询语言:和数据库沟通的语言。
$ }6 {1 f$ d( N$ C# K( K7 g9 Y  c# X; ]* P4 z
DBA:Database Administrator 数据库管理员
& @9 |+ o4 u% {( A, N3 n) [! y+ Q5 j5 y1 y. V
Table:表:数据库的基本存储单元- I7 D8 d% b& }& ~
横向:行,row,record
5 `" [: g$ f& U. t纵向:列,column,field2 q4 |# M8 g& q0 q( D* P

' S. z9 j. e4 i) m任务:把用户数据存入数据库的表中。+ H  w. M0 F9 [
实现:9 T1 D) U; W: b0 _+ P1 g
1.建立一个连接
& }) b6 Q! t$ J7 \  U1)数据库所在的服务器的地址:192.168.0.26% c$ r& C  L6 b4 o3 b- S+ z
telnet 192.168.0.26
! C& C# P% A% u服务器的帐号/密码:openlab/open123
& d% a4 P* M. D2 k0 R2 X2)数据库访问用户:1 a+ r. P' v' H+ ?! Q
openlab/open1234 J7 h, N# N* E' x+ v, `: t
数据库默认帐户:scott/tiger
/ @/ U$ u  V+ j3)oracle数据库的连接工具:
) N% L  w& N7 E6 C* r7 }" o1 v8 ~( Y. jSQLPlus:Oracle数据库的客户端工具
. O8 `; |' V1 x7 v: |1 ~6 X( P* H# K位于数据库的服务器上,192.168.0.26! W4 V; W7 h' d
$ sqlplus openlab/open123( ^* W+ A5 ^# z0 Q( e! s* w
SQL> & }  y+ t5 t/ p1 l* A
如果提示SQL>表示登录成功) y% g8 L# G7 k# m0 r5 X. A% O$ M
  G8 R+ u$ S, W* M: h% Z
: S: {$ I" c' T8 p
2.把数据表建立起来。5 N/ D$ P2 @4 C& D
定义数据结构:0 P& m0 E# L+ l' @; ~
create table user_ning1(
+ [0 w) K1 G" v6 Xid number(4),
6 k$ q" y+ H' G% `8 kpassword char(4),
, s+ o" _! e, j5 |! J+ }* ?name char(20),( e" i) P8 \! ^3 R
phone char(20),$ p; ~% t$ R& g7 g2 [& @7 `. _
email varchar2(50)
. j  ~- d' s+ O  H);
' {& n6 ]$ a" I提示Table Created. 表示表已成功创建。: b* h' z6 w) V7 r$ x
7 p6 {' p9 M* `" u$ W3 n" w" r
数据类型:
. M. a# n$ X8 a1 x1)数字: % s! w. @1 |* ]0 \
number(n),最长n位
8 ?! F! T0 V. c: ~% |: knumber(n,m),最长n位,小数点后m位
6 l: s" O$ W$ J9 A; @1 o3 u. w; W8 Inumber(7,2): 99999.99
: a5 ~7 f6 r( j  B( T2 e& u6 p( `" h+ ]( G; v
2)字符串:0 [* v! L0 ?7 `6 k$ ^$ `
char: 定长字符串
# d$ t, ]& `* |+ i1 Uvarchar2:变长字符串+ P. S* L5 j% C1 Q4 E
char(10)
7 \- p  A/ A* Uvarchar2(10)( f  x* O9 B- e) q# J
3)日期* g# I' L8 Q( B( s9 `. p
date
( R8 v: t0 X- N
' I/ i# T/ l( o5 Y清屏: clear scr1 j' w/ G0 S8 z; W! \

, {8 ^! E9 l8 }& b9 M3.把用户数据存入数据表中。
2 ]; D( \1 i) M5 ESQL>insert into user_ning1
, J( }8 G3 e3 ]    values(1001,'1234','liucs','13600000000','liucs@sina.com');
- g. G$ \" p5 d% M4 l9 N5 x% d, l% V! \( M$ j: G5 t
insert into user_ning1 values(1004,'1234','liyi','98765432',
$ d: d; d! Z5 y'liyi@sina.com');
% x7 {- }7 ^! j5 d7 g+ v
6 r- P& P+ I# T/ K2 r: _ 错误语句:
# c8 f* |# v- z5 a+ c' `' |0 Ninsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
& J" D9 s( e3 {/ c) R" t. S" U3 L6 U2 v1 i8 o/ z
三种SQL语句:; t: S# L- p) v4 i8 r/ A$ j$ ]6 s
1)create table...* T) e4 }: C: r2 X  V" O$ M
2) insert into...values...
) _4 x' G, b, I* k: i" F8 k3) select ... from...
$ P( w9 s, ]. W% D. O& D, R: h1 T  K! j% n2 A
SQLPlus命令:  P. G7 q5 B! @/ q( b+ f
设置每行数据的显示长度:
9 e1 ]2 K0 O& ~, ^4 ~SQL>set linesize 2003 K/ E* K' h" q/ C! ^4 `' Y$ t
设置列宽:10个字符
) H& w. c- K$ N9 j* k' }SQL>column 列名 format a109 Q' Q4 E: ~. u. Z6 H
查看表结构:desc:describe 描述
, v. H% O) J+ n0 i/ t& T$ k/ c1 H# ySQL>desc user_ning1
: M/ q( r. d. |( c* d# Q8 z3 V% h; n: q
规范数字宽度为4位:
- \( Y0 t! k. v9 \) h9 zSQL>column id format 9999
9 q6 Z/ C/ {/ v; L, `/ a/ W4 b# B3 C简写:5 Z  J7 u. X- L
SQL>col id for 9999$ h4 x4 ~  z3 f4 a, u6 j, a

/ c% r. ^) [) u! F  `, G9 r0 ]$ @--*表示查询全部列
; }0 V  `2 h* ^, X' @- _; cselect * from user_ning1;
  E* k7 u$ u+ c; v* z1 D' W, x/ X7 f- S
select name,email from user_ning1;
) k& G  Y) r' M3 `
+ b6 V5 ^' X/ j* ~8 q, \--查找1001/1234考生的名字?
3 K9 g1 X4 G  ~& _0 _select name, email from user_ning1
; c& P$ ^6 _# R- Z, ^where id = 1001 & `' p* p# u) E4 i
and   password = '1234';
# r. [* q9 [0 m2 w0 D
) |7 F6 `; E" S$ d8 `数据准备:# P$ v2 {& q5 m( x
1.表dept_ning:
% g' p" t/ p6 R6 C6 Jcreate table dept_ning($ ~  [5 Q* d1 C7 h2 `* @
deptno number(2),
/ `. f8 a1 c& Fdname char(20),' y# D. f5 W4 j( ~, Z! `
location char(20));% Q$ \( _8 z) [  N

' v  u) U8 i  X! b, ~drop table dept_ning;, P6 Y& j3 h6 f

1 A- ]! R4 V& c- M/ Q% w增加数据:
3 M0 C, B. y5 V2 w6 Ainsert into dept_ning values(10,'developer','beijing');
: G1 a* Q% ~+ Z! l& Binsert into dept_ning values(20,'account','shanghai');& O: P. C) f3 r6 \
insert into dept_ning values(30,'sales','guangzhou');
' V& m% s$ N' S% k2 w" w7 Iinsert into dept_ning values(40,'operations','tianjin');3 C1 T, c( P2 |

  ^/ w/ P& A+ }commit;
- S0 n7 X! i% w
, `: _% l' C0 m% v% N3 Uselect * from dept_XXX;
8 N7 F/ h3 n' f+ @: P2 A0 Q6 M( K- l1 w; D3 }! ^4 f
2.emp_ning
& h4 e/ B$ Z! ^8 f) tcreate table emp_ning(
' d: q6 ~6 E  J( x& L; p  f2 uempno number(4),
9 n' \9 ?. P! s" v$ Q5 iename varchar2(20),2 x# P. ?+ F3 D8 I1 N5 E- [2 H2 h( P
job varchar2(15),
  A) d3 w. @( D8 p2 rsalary number(7,2),: Q! \6 h7 H4 k: T
bonus number(7,2),
" g; S# t$ B1 j9 K. g. W4 B) ghiredate date,/ n6 r/ M8 Y" m0 K& u$ S% X4 v
mgr number(4),
) p/ k- \4 K. i8 \deptno number(10)" B0 y$ E3 R# e" m+ {6 f8 Z9 ~
);
9 T5 n1 b# q. ]3 [( f( e+ R$ c. Q$ S5 k# m  W) k' i
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);7 n/ c# t7 w6 ]5 X% K
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);  j* {2 @) p4 C- |' t
insert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
. C% C" \8 ~/ O7 B& i$ Dinsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); , `& n2 R. m( A1 K
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
3 [3 `8 E6 W) ^& f% C* e' ]insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);/ A5 d+ [) [. Y4 m$ O
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
% D' L& {2 z0 X4 Finsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);) T  |/ j0 o+ h0 g- P& I
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);5 x$ G* }& P7 B7 i. X0 {* s8 \
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);/ @! v8 n. h% Q# ?! @& d
" c$ f' R& W7 b) ~1 d
set linesize 150
; L) R1 d& ~) s' e1 S, }col empno for 9999* M' J+ l1 z4 \4 w
col mgr for 9999
+ b' U; s8 [# Mcol deptno for 99
- n: w' f7 A2 l' y9 e. d2 z$ Vcol salary for 99999.99+ v4 {/ b+ v4 q8 o

4 P, k9 U0 r9 l' }, Tselect * from dept_ning;
4 F5 U) q6 o% z/ P' P$ Wselect * from emp_ning;& ?1 {2 c; t* [2 t" @
  ~; v/ C! S- \& ^
一、学习查询语句。5 t/ Z2 C8 |6 a7 P6 V
1. 计算员工的名字、月薪和年薪?
5 b% h3 j5 p- R3 k8 K- Sselect ename, salary,
( V; Z' v1 L4 b6 L- [% k# Lsalary * 12 year_sal
+ h% g6 U6 p% F: P5 Lfrom emp_ning;3 t5 `# F7 a5 H3 U* z9 h+ g) s

! V* m3 l  z  _. U$ s. H2.计算员工的月收入?# h; x5 M  N  a( P0 h3 W# K
空值和任何数据做算数运算,结果为空(null)
) X1 m; |9 d# z/ pselect ename, salary, bonus,
# J: r2 _) q9 @       salary + bonus month_sal
: g4 r5 G- }7 O$ z$ i% P. ^from emp_ning;
! ]2 g5 q2 C9 W1 [/ B% W
: i2 N. S2 A, K$ J# R6 {select ename, salary, bonus,
2 c) J% B! s7 n6 T5 w1 M     salary + nvl(bonus, 0) month_sal
. o0 W/ A* z( cfrom emp_ning;6 z# A# `7 a8 F+ I- H! j8 E4 o: @; ~$ ~: z

6 Q# O: h* S6 n7 E! V8 e( z" x! ?4 opublic double nvl(double d1, double d2){
0 }4 A( c3 {: I& U        if (d1 != null)
- I6 ~$ F: c4 v% Z% H$ T; c- ~            return d1;. b6 U: U. L, g' u/ s
        else
# T! F  A3 g, G+ l- Q# j4 E            return d2;      
" a# U! u7 l: y: {- H& G" W; X}
& U' T! J% Q2 Y5 O# ~public String nvl(String s1,String s2)
6 m! M: q/ Z8 M2 o{
4 J  {1 w- {& M7 `' B- Y        if (s1 != null)
! Q+ L4 X/ c7 h& B5 ~. X5 G                return s1;$ {1 \7 t# [1 d( _' M9 f
        else
! f* U( ^$ f' ?! H                 return s2;! w4 Y7 k5 a+ V/ ]( u/ @# n
}
! k9 v% g# ?, I3 Epublic Date nvl(Date d1, Date d2){
- I0 O. b" J" n# b4 t        return (d1 != null) ? d1 : d2;& v! L4 S# c. N6 k
}+ _7 p0 H( G7 S1 v& Y

* e. `! t, S1 D* l) \3 N% Q) o) L0 cinsert into emp_ning( ^3 F$ }% M  n5 Z
values(1011,'余泽成',null, null, null,
! b) G% _: T2 l$ j7 H1 I+ N, O# v6 o" B; Fnull, null, null);
& F& D# L. U0 W1 @. t7 @简写为:+ E. P" \' T6 y0 C+ X* o0 V0 K
insert into emp_ning(empno, ename)+ ~! o5 C; d6 l4 q! u( Z6 W' Q
values(1011,'余泽成');
( u7 e, W: ?1 ?4 `% ?# S  D/ j+ G
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。. E0 |( K3 b" B% A8 B) a, o
select ename, nvl(job,'no position')% N8 q7 R+ [/ t' g  ^
from emp_ning;4 U2 E. ?9 J) q* u+ M

! W  R2 ?. M" I3 }7 v7 j查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。; P9 R' k4 B3 M
select ename, nvl(hiredate, '10-OCT-11') from emp_ning;
" @& l1 m; z5 o+ R! d# C0 s! g8 B! [7 @7 ?  e4 b* M, y$ \, J
nvl(bonus, 0)  L2 m' E# G; N" U0 Y! [' E& V
nvl(job, 'no position')
* x7 w5 N  O/ O, b: D" qnvl(hiredate, '10-OCT-11')
- u0 [7 x4 L' t; Q
  M3 d% ]3 t& W--复制表emp_YYY为emp_XXX
* Z  l% Z% d7 I$ r: Ncreate table emp_XXX" q+ e6 w! z5 ^5 t* v3 i  }
as$ F! ?3 G2 p; {7 N* [5 R
select * from emp_YYY;9 b* R4 S$ u6 l
- F2 e) O0 c% N" x# q; t
3. 机构中有多少种职位?5 Z; z8 X) A$ i7 ^1 }' M
select distinct job from emp_ning;3 N3 e' s+ `) \8 ?

% W8 J, y' z. D  C; E6 @! @员工分布在哪些部门?7 D* K1 C6 K) _) j0 W. @
select distinct deptno from emp_ning;
6 p8 P" A, W9 I+ N' |; K
! F" g5 ^0 r0 v4 ]# o: ?0 Vdistinct必须/只能跟在select后边。
- w: H$ h7 a6 |  O- x9 R
: `% ]( G7 y! C# D3 L( \/ \0 }4.薪水高于10000元的员工数据?; p8 Z9 }6 H0 G6 B/ T0 H1 e
select * from emp_ning
1 _7 i4 J+ [6 ywhere salary > 10000;
4 k" V1 H  [$ d7 e9 s2 m. x5 \1 n3 N, N
5.职位是Analyst的员工数据?
4 u; ^4 {# @3 u! Bselect * from emp_ning9 K/ K4 I1 A! o' i" [$ f: L9 F' a+ e
where job = 'Analyst';4 z/ {8 ]2 z7 m0 K8 A, x

1 Q7 P# P! {4 Canalyst  ANALYST  anaLyst
9 ]- M! z# Z! d& Q. T% X2 w4 w/ W) @8 s* W& V, _; L
select * from emp_ning, L. c" Z7 D% @% e: U  a; z' F& h2 O
where lower(job) = 'analyst';$ `1 @9 b. S5 l

1 r$ T" f% ?2 I0 e" H# F' g& Eselect * from emp_ning
- [: R; v% u& V6 Y8 Rwhere upper(job) = 'ANALYST';
, D* H1 c0 @) k& f
$ c5 L- V. q3 w: K6 z--如果数据是analyst,查不出结果
5 k2 E8 t/ s9 N; N2 E$ M- Y# U--SQL语句大小写不敏感,数据大小写敏感
$ J3 ?4 ~, j" d$ ^- H0 p# Q6 i: O% `
6.薪水大于5000并且小于10000的员工数据( I2 ^$ y$ A5 a3 F
2 n% U7 }$ q$ v+ `) m
select * from emp_ning5 s4 w! W. d; t
where salary >= 50005 v! M$ C( G; C' |7 ~* k1 Z
and salary <= 10000;
, B  H! [/ K+ c3 q8 l4 @: M, Q
" S2 a3 ?6 L% a# a# F' i) i--在区间中:between 低值 and 高值
1 f' y( F. V+ _--闭区间:[低值,高值]
" f6 n) X1 s" s3 ?6 U& q) `select * from emp_ning# L3 q: u0 N$ `) z5 t$ E% C
where salary between 5000 and 10000;
' W8 h& `; J3 o# E7 _. Y! `% F, G) v3 B2 V- ~5 b; n
入职时间在2011年的员工?
, p  Q% N4 Y! e" W( ^9 a['01-JAN-11','31-DEC-11']
6 ^- C' X+ D0 m0 ?6 @6 C4 _select * from emp_ning
' x7 s* E' D4 F* `where hiredate between '01-JAN-11'
- p( t: v$ d2 _+ D! G, rand '31-DEC-11';
' ]& P* b! K7 I2 R7 h. p6 `5 I& M: T/ O4 u  }, A0 B1 Q. I
7.列出职位是Manager或者Analyst的员工
1 o: ]. k4 l. ~  A
; O: g( d! T3 O4 Fselect * from emp_ning$ g4 E& j/ e! o" e( F) U( S% W; d
where job = 'Manager'6 \" `( V& K0 u; _
or    job = 'Analyst';) N& Z* m+ p0 A
--等价:in (list),在列表中。
8 F  w; v# Y. N  [( r2 {select * from emp_ning
; M0 M* }# M  V: O2 w% s# F8 c: @where job in ('Manager','Analyst');
( E4 w+ n2 E; X
) |& @) W- u1 H( j( k8.列出职位中有sales字符的员工数据?
  `; n' d* ?8 {salesman2 [0 s7 L' K( O9 B
sales
7 ~! H' j( O  t3 n7 Kbefore sales7 u; `1 S9 |& y4 E8 F; f6 M
after sales
; Z8 ~' s: x& T1 {before sales engineer
& L: Y! u' G5 B1 L* d7 A: X( h- O* q- B; r8 r3 E" g
--%: 0到多个字符,跟like配合,模糊匹配% n& Z% f5 |9 `3 g4 R' p) z
select * from emp_ning  M! n0 o1 ?! T, T
where job like '%sales%';
, _8 [! T+ d( ~7 Q5 b8 i0 K/ M, ^; r' H
9.查询哪些员工没有奖金?7 x! N9 b$ Y4 ~$ S
select * from emp_ning
3 W9 u4 ?6 D5 T3 h. M2 Cwhere bonus is null;* s' A" H. |/ c3 A1 Q$ I

" H! ?7 u8 g' A* c1 m9 o- T哪些员工有奖金?
" i8 k4 g4 o: b* H1 G' E, m% ?select * from emp_ning, J. W7 Q( G, q6 [6 `
where bonus is not null;
1 `  c7 r; j$ Q
1 t% |" t4 z7 x3 U. u% I小结:, d& U" a( Y( o3 l8 y6 k) p$ Z
1)create table ...3 I  Q1 u4 Q' W
  drop table 表名;
* U3 {2 K/ L) \7 h$ @5 U2)insert into 表名 values(...);
. o4 \* O6 ]7 E% U2 P/ T3)select distinct | * | 列名 | 算数表达式 | 别名
. S- u4 ~. t1 J1 r& S  from 表名4 V/ c( ]# P7 d+ Y0 @
  where 条件1 or 条件2 and 条件3;
9 @( J3 Q& D( h& o7 G8 z: l  L# z9 p: r$ V( }9 E* E
> >= < <= between...and... in like
. N, k8 B: x; f6 f
' O9 b2 {! Y5 I" g2 O! D( k5 ^- v" ~

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


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

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

   

关闭

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

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