我的日常

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

动态微博

查看: 2160|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |倒序浏览
数据库: DataBase,DB0 n9 X% _! E1 v' p' f( B
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。0 j1 E: O; C9 I3 c" b% K
oracle是一种数据库软件。
( V% B) \  e: _. e7 E
8 `3 L. @) ^( i( O8 }+ vOracle  db2(IBM)  sybase(sybase)
' V8 p: w: r% I) usql server(MS)  mysql(Oracle)! t) v0 a& o# s9 f% a/ O8 |
access
4 Q6 k$ r( B9 n) A0 q3 ?2 n( T( k1 D5 X
数据库管理系统(Database Management System): DBMS
& [) ^* G2 W  \% e; @  K) E! g' I3 q# i( }9 C
SQL:Structured Query Language
* X: o* v3 N5 X+ _' U% d0 V: P结构化查询语言:和数据库沟通的语言。0 y6 `$ k; |3 n0 @! B3 H4 _" E3 t
- w  q) O; D7 Y$ f- F0 L5 S0 a
DBA:Database Administrator 数据库管理员) m& l+ m* @1 P

$ D. b, Q1 {3 P5 C6 J) \' V; v+ wTable:表:数据库的基本存储单元6 U" ?3 b+ e9 L  \9 V( R
横向:行,row,record2 S6 U7 U5 ^1 |
纵向:列,column,field5 r- m  a, I/ V4 S+ T( ~

  V% D1 n) L- J任务:把用户数据存入数据库的表中。
2 u" b* X4 z: l& ^' y6 Z1 X实现:
7 `0 |9 z1 X$ O8 }# f, f1.建立一个连接5 z& i1 U* U, a4 Z
1)数据库所在的服务器的地址:192.168.0.26
7 }, G, [2 g. }7 N4 ]6 Utelnet 192.168.0.26' O) p9 d; u" c+ }- X+ N1 F8 C
服务器的帐号/密码:openlab/open123
. r' d0 |2 e% l1 t0 }( @& s2)数据库访问用户:6 p! `7 _2 ~8 h! @. ?) P) K" H+ S
openlab/open1231 }+ D( T: h0 u( W, H% I/ x
数据库默认帐户:scott/tiger4 B; E2 B4 Y2 Q7 _
3)oracle数据库的连接工具:  _+ {2 r3 f# h. U. A2 [
SQLPlus:Oracle数据库的客户端工具5 Z2 i8 ^0 }8 h/ K9 E
位于数据库的服务器上,192.168.0.26
& ~0 S$ ^) S0 l" P$ C$ sqlplus openlab/open123
& ?% [6 ^1 u: L$ }8 iSQL>
% c; y4 b  s9 v/ F如果提示SQL>表示登录成功5 r% ^. n" L8 X4 V

) w, F5 ^- [7 r  u, C' w  e5 _; A% k0 I" t& Z' E
2.把数据表建立起来。4 @, d% d2 n/ ]! {5 ^  C: v  F0 K
定义数据结构:2 `+ U8 w: w( F' F7 v% i. U
create table user_ning1(
5 T5 h! W/ y& K% B8 ]8 F" f. uid number(4),: @$ I2 ~* ?! L3 w% T1 j6 J: u. _
password char(4),* O! J- W  o/ U/ Y5 _% W: i# S( B4 E
name char(20),; p) B0 b. r( L5 d' }, h8 ^$ q
phone char(20),
% s5 {" f( u* t6 J' l1 Y" [email varchar2(50)  U0 M* [. i) C  _4 p9 P
);
, H2 Y! F! X  I' T) c# q# H" ~4 H提示Table Created. 表示表已成功创建。# |  P6 @7 W# p4 M# [7 C. u
$ _/ Y- U7 o" s- F" a% Z! _; k5 c
数据类型:/ I1 F2 U! V. u5 N/ O; ^  G
1)数字: 3 w6 Q; P+ I, P8 z: W# r
number(n),最长n位
3 l5 A( ]9 [* _* Ynumber(n,m),最长n位,小数点后m位4 S$ y( N  x$ U# W
number(7,2): 99999.99
9 s, n. u0 G: @: g3 f- m3 y. y  Y/ p! T, U$ R+ x
2)字符串:1 c) p. W3 S. U0 P4 Y
char: 定长字符串  V; x# q4 ]8 r
varchar2:变长字符串
: O. V! Y# _1 Q" `char(10)7 ^3 A% |1 y2 N  [
varchar2(10)' i% i6 G1 Y' ^
3)日期% m% w- B) W6 M) l+ y2 n, i
date
4 A3 w+ c" `/ U
7 S1 z* g% e) R9 X+ `清屏: clear scr
+ ]4 u8 V* I! S8 E. V9 U3 o) J/ V8 G0 n* n; ]" [4 A% {
3.把用户数据存入数据表中。
( a4 {, @( Y6 _' v2 I3 TSQL>insert into user_ning18 a6 w7 W. J! Y
    values(1001,'1234','liucs','13600000000','liucs@sina.com');
; g: f/ N$ `1 g* O/ h: l
( F* N2 |& ]8 N) R) R* L% x& ginsert into user_ning1 values(1004,'1234','liyi','98765432',
0 V9 X- ~+ y, i8 \( c" k# Z'liyi@sina.com');
4 e8 V% [& a, V/ L: P
& x' l8 f( z1 a1 c: { 错误语句:
- Z2 R) F+ w# z+ f' W. _2 }8 r6 a: binsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
3 h. u* ~2 ^6 e+ k4 ]) _' _" g- ~' M$ f- t# u/ T' w" Y. T
三种SQL语句:
  t! F* h3 \5 X8 f1)create table...
2 l- J; ^* |3 F2) insert into...values...3 ]( P0 K  }( g6 Q6 c% G$ G
3) select ... from...
0 S2 Z7 o, t2 B6 o6 B3 \  ?. T& u  R  h$ \3 |  P
SQLPlus命令:
" |& ?/ |: V; T5 S设置每行数据的显示长度:
  @/ U) k  h( D1 i) SSQL>set linesize 200
2 V& R9 E2 {9 w( |3 p0 l* G  _2 u. _7 T设置列宽:10个字符
" O: ]' T$ b8 W+ y- ASQL>column 列名 format a10
5 i1 D0 s& W; K3 g7 m查看表结构:desc:describe 描述
7 N$ B7 Y& D, ^8 M9 }SQL>desc user_ning10 w6 o& [+ G/ p" t
% K5 t4 V6 @7 v
规范数字宽度为4位:
! s% {" r, s0 M; W$ HSQL>column id format 9999
7 q( k0 A/ K6 N/ k! R简写:
- d' ^7 X7 e5 z7 I2 [% ]( pSQL>col id for 9999
9 v) z! r+ Y1 w+ S" v  n0 U
: K2 K# r3 B3 S% j$ E--*表示查询全部列
' ?$ a4 i6 @! W- W6 sselect * from user_ning1;
/ \( |  X5 J4 _, l' Y7 p' N2 }+ ^3 R, c4 |5 B
select name,email from user_ning1;
# G, @. x2 {9 C2 Q* w( d
7 f# p- N- k, E4 i( J; U--查找1001/1234考生的名字?
1 y0 o+ g  f9 R3 Q2 Lselect name, email from user_ning1
: u! I8 X0 E# owhere id = 1001
% b2 h- N0 `% L: Zand   password = '1234';( r. m7 v- A( e8 s
/ {6 U2 W+ d# P. C" ~
数据准备:
3 M' B* E& I% N# b, p: \1.表dept_ning:
/ `4 n' B0 {3 [' M) M* P: _: ccreate table dept_ning(* I0 o' E3 Y9 \  X
deptno number(2),
' f, M6 h3 @, S! v% Q' i8 j8 \, ~0 odname char(20),* _) Y0 x+ Y! A8 b& e, ?/ a( B4 ?
location char(20));( \2 J+ e  }1 f8 s1 J* w
9 `" Y9 k( }; P& l( {8 D+ {
drop table dept_ning;
) p0 l# R) `5 J# F/ Y  b+ q, w* T/ ^/ @5 Z2 @
增加数据:7 q8 B/ g4 w/ D. U
insert into dept_ning values(10,'developer','beijing');7 w- w; S8 ]/ Q
insert into dept_ning values(20,'account','shanghai');" I, C1 n7 {5 C- s/ a1 i/ O
insert into dept_ning values(30,'sales','guangzhou');$ r3 \3 K, n) z) x& j6 U% s+ c
insert into dept_ning values(40,'operations','tianjin');
2 ^9 P: R; E( z9 G- N) f5 P
; r, q3 i" t5 ]! z) q7 W6 L6 o+ [commit;  Y4 F/ W: Q+ ~  O9 j) A! ?

7 q4 _8 }: p2 M$ j! j" D) Wselect * from dept_XXX;. d8 G* S2 l! `* b1 N* z
3 H2 j: P3 T: x
2.emp_ning' E( l3 `$ @. ^
create table emp_ning(- L) x  s6 h9 P# y9 A
empno number(4),
* j0 ^) b  p( j3 @- e* }- S) F+ J6 W1 aename varchar2(20)," H3 `+ M" f/ b& w
job varchar2(15),! f1 W2 k; G4 Y8 v
salary number(7,2),
" ?: l6 \1 _: N& fbonus number(7,2),
0 O) _" V; r1 F% yhiredate date," [* N; W# C' f: j) b. C3 @
mgr number(4),/ K  t+ l" H$ I$ K
deptno number(10)
/ e5 |9 ]; F' ?4 J4 [- Q  _);. Z; f( V0 O4 A3 q) Q  s) S
1 @" q: k, E2 R4 u# h
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
% P, ~2 \+ e4 p* G2 O5 a  Hinsert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
  c' ~6 ?& |* b( T( einsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
9 Y6 F4 G) c5 Binsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
5 Z- B- N" l/ q) X) [' F$ Qinsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);3 L+ I* p4 w0 M; Z+ N
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
, T( [) @7 x( a* m3 F( X1 Linsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
3 q# P8 S3 w- qinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);' t% S( U. N+ Z
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);6 ]/ K9 v! p$ w# @
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
: W, X/ x" t( h; a' I& y" w
8 s2 ^% g4 P0 _! Y  Mset linesize 150# M  i9 Y" [& x
col empno for 99996 Z5 z# N7 T* c) x: X% V5 ^1 b
col mgr for 9999
7 a0 Y) M& `* {$ K8 n# o( ?, {0 q& kcol deptno for 99& t' B) I6 a. O6 ~8 Z% z6 S
col salary for 99999.99
% J% M; e4 S) c- g, t( j/ x) `7 D6 S
select * from dept_ning;$ f6 }; M) `  l- H$ v
select * from emp_ning;
+ h8 Y# q: ~7 g3 {6 c. O  Q' X2 }9 n4 ]" Q
一、学习查询语句。
/ }( y4 T2 a9 j1. 计算员工的名字、月薪和年薪?
0 |7 A9 `8 B, L' k# ]; W  U- Bselect ename, salary, 9 a9 C) j& e1 V0 t
salary * 12 year_sal
/ I+ b* O5 L3 _+ j2 T$ dfrom emp_ning;
( K. |. |" V$ W/ W# u+ [- P0 c* G' }: V3 t
2.计算员工的月收入?4 E" n6 N/ k1 w6 v( l- n0 C
空值和任何数据做算数运算,结果为空(null)
+ |4 A8 G( k9 d" nselect ename, salary, bonus,6 n' k8 O! }( M# F
       salary + bonus month_sal
! y: h9 \7 R# ~from emp_ning;/ c2 r1 k3 `* X/ N9 B$ A

/ ]: \( {9 e+ ^& Sselect ename, salary, bonus,
% ~$ P# S5 R4 f- ?5 Y1 `     salary + nvl(bonus, 0) month_sal" W' [1 p9 A$ k( m
from emp_ning;
/ ^" F- Q' f, G- i% Q; o: ]; z% G* w% Y% o( s  N1 p9 H
public double nvl(double d1, double d2){
' ?! H: M5 Y( u        if (d1 != null)
$ W# e# d5 r3 _            return d1;
: r" X% Y# J! D6 q) ^        else
5 ]" s5 k8 j5 ^( g. o            return d2;      
' f3 M: v5 c) x9 r6 `' ^5 C- p}
$ L: T' ]5 ?$ E0 @8 T' \7 Tpublic String nvl(String s1,String s2)5 r0 q  w6 I/ Z3 I9 {
{
, s) k9 f7 f6 R2 k) L4 c1 u4 x/ }9 B        if (s1 != null), b9 F. K: e( [. d8 f$ n
                return s1;
" @3 x2 r5 }3 U' X+ _. I        else
  W* N2 r4 N. u6 S+ g                 return s2;
4 P6 j; U! z/ s+ ^. O}5 s& ?3 u! F0 J: I, [+ ?( C& S
public Date nvl(Date d1, Date d2){
4 i" h% s2 j# l0 ^        return (d1 != null) ? d1 : d2;
- y" z* ], ^! k, t% a: X3 H}3 T" E9 Z+ S( f! i$ |" [8 E: y
2 B; M# x( G9 e7 g2 h7 w" d9 u( s( x3 A
insert into emp_ning5 _1 Z; V* z" k7 B
values(1011,'余泽成',null, null, null,; L  D0 F9 L/ k
null, null, null);: q5 d  A, r+ D! J
简写为:
2 n* P6 `9 ~, C( b1 E3 @+ qinsert into emp_ning(empno, ename)7 J* B, G+ I) t  a/ v
values(1011,'余泽成');
* N' A5 z0 c+ q8 A( h+ T' J/ @& Z; E# Q1 ]
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。0 W- t! f5 E: `1 f
select ename, nvl(job,'no position')
7 K9 t  Y; t* D* Tfrom emp_ning;4 y8 U2 r6 t$ }0 o2 p
, v. |5 I3 l6 O4 J; }" v7 `
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
" [/ ?( N- ~7 |3 Dselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;
0 P- j$ s! B9 e/ o1 z) c! g% h" }& H: w
nvl(bonus, 0)1 v" w5 \: j) w3 l' D! ?; d( X, C
nvl(job, 'no position')& M- V$ _1 J: I1 T: G+ |
nvl(hiredate, '10-OCT-11'). g% X) ]0 y/ P7 D% O* K' U( }+ ]. Z3 {

. X" p) I: \; u; Q+ i--复制表emp_YYY为emp_XXX
+ }0 l- @8 n" O$ `' O1 ucreate table emp_XXX+ }, l1 `1 x$ \; C
as
# q8 e3 [0 ?9 i' d$ Rselect * from emp_YYY;
' A/ s1 \( \/ Y
% ~$ l0 Q  X2 `& o  a9 s$ s  [5 n3. 机构中有多少种职位?7 F1 b/ Z; u( o
select distinct job from emp_ning;
; E6 k3 `! N" W- K  \
) Y' x6 N/ }# A2 U) c员工分布在哪些部门?
) a- `& I: |; ]4 [select distinct deptno from emp_ning;. ~3 _; P% y( a; v% S
3 Y9 @4 H' E  t# P# z+ y4 `  u$ X
distinct必须/只能跟在select后边。) A1 G5 P* l/ w% P, G5 l
, I4 t% c. A0 }' r# Y/ z! H
4.薪水高于10000元的员工数据?6 k* m6 `/ M, L  b  g
select * from emp_ning
# @/ R& j6 a  k5 u7 ~. k2 Q3 \( Mwhere salary > 10000;& I4 o% ~. Y; q* p: P+ X' w" V
; n+ n' c) [1 u% t- J! \" r
5.职位是Analyst的员工数据?
+ p6 B) E: r: j) X( t+ qselect * from emp_ning+ L' J: b9 t1 q3 f! s
where job = 'Analyst';
6 F5 ~1 }) E) u$ n6 m
' ^( h- ]  P$ D1 zanalyst  ANALYST  anaLyst/ z' d, D/ Z1 ]7 ?

8 h. H: x( i' s  dselect * from emp_ning- F* R; P) }& @$ E( e" ^6 R+ s
where lower(job) = 'analyst';# l( H6 S- K* `# I1 `

+ f/ D% {# ^( q1 Oselect * from emp_ning) P. z7 M- I, V5 u+ ~! h# G& v7 C' P
where upper(job) = 'ANALYST';
# w" P% A1 h; v" V. s8 W; X) l+ S3 D/ G! d/ z6 y3 K+ ?
--如果数据是analyst,查不出结果
: U- m( b' [' Z) G--SQL语句大小写不敏感,数据大小写敏感! }# a$ O, d0 E( V& P7 i
4 `5 z) v8 H1 a1 b
6.薪水大于5000并且小于10000的员工数据0 M8 F: w5 C: o; o

, r+ ]4 X  |4 B3 Aselect * from emp_ning& n7 m* q4 C, V/ `6 c+ r/ w7 W
where salary >= 5000
. Q1 c" I8 s; D" ?/ Z9 O1 w! x1 a: @and salary <= 10000;
  P$ R$ x/ Y& v* N- H/ l6 T
! ~8 F. X) V, i0 N' }+ K--在区间中:between 低值 and 高值$ ~% o  w( ?% M% h3 ^
--闭区间:[低值,高值]
) s4 y4 ^) N& X. P. Rselect * from emp_ning  p3 P6 @/ |' h2 e% l
where salary between 5000 and 10000;
" H  P0 p* x5 Y6 c  c4 a, ~) B/ t
入职时间在2011年的员工?
  w+ Z( q/ M0 |3 v+ e['01-JAN-11','31-DEC-11']7 L7 R1 u; \5 b; ]7 L4 J/ n# W
select * from emp_ning
4 O0 h; `- }0 K# owhere hiredate between '01-JAN-11'5 J: x6 r; \# {, H+ r
and '31-DEC-11';+ `& c  \+ r* o7 x- e8 J$ f( w$ }

3 ]# I4 R" v9 a9 k" S/ Q: ]7.列出职位是Manager或者Analyst的员工- b6 E" S: W6 w/ K7 G
% N# M  J7 e' y! {8 F2 q
select * from emp_ning; C; P% H7 W; E: a; G0 H1 P* z6 B* {
where job = 'Manager'1 c4 C! [' P. R9 m8 ?. b3 m; B
or    job = 'Analyst';
- K* q2 V7 }# N% H9 S--等价:in (list),在列表中。
  L" l+ q% E6 K$ Y/ w) @select * from emp_ning
" l! [! |! P  c5 T& A* {where job in ('Manager','Analyst');; {" ]$ @3 j# ~* A$ Y
- }; }/ W. b# j$ A2 H2 X" {
8.列出职位中有sales字符的员工数据?
) v3 }8 l. p+ r# S# P) l, M$ Fsalesman
" p0 k/ ~- U$ Dsales: {- V6 K2 Z+ F$ m! f2 h+ B
before sales
: w4 }& a: X6 Y1 x) M/ D3 p: g% }after sales  g+ i" t, X( K5 C
before sales engineer
- }  g" S/ Q! o+ p* f9 T5 i# D: N9 g( w( r1 n+ f( P) O: F
--%: 0到多个字符,跟like配合,模糊匹配3 G# H  L% S9 }
select * from emp_ning
& I# A6 ^5 q7 h' l) R5 hwhere job like '%sales%';8 ?" ?' W  M2 c1 k5 m
2 f; |0 `1 o. A) H4 ^6 ?
9.查询哪些员工没有奖金?  j% g! R" c7 F& {( I" s( E$ H) ~
select * from emp_ning4 Y7 n! k/ C1 p( I1 R" d
where bonus is null;
: |+ `. m, Y8 ]: K* J/ Y# n" D! `
8 l+ Y) O# P" U哪些员工有奖金?
# u3 W& B6 s, J# t& Iselect * from emp_ning
; [& l/ O7 ?( x6 Z0 a) p7 Pwhere bonus is not null;
/ b2 o/ |  J) C9 i: a" d3 D3 X' B* {" Q
小结:
. {2 F( M6 L+ v1)create table ...
9 T; p! B% Y' B0 W  drop table 表名;
4 q6 j- |: s, A2)insert into 表名 values(...);
/ }9 d* |1 y: G$ J3)select distinct | * | 列名 | 算数表达式 | 别名+ R9 Y9 F6 ^) G5 U2 x
  from 表名
/ h+ X! X1 Y/ [, C# f8 Z6 t2 ^" p  where 条件1 or 条件2 and 条件3;
. P6 o/ U. ^+ d8 n* _$ o/ S7 X( w4 N: {: b
> >= < <= between...and... in like7 e5 d. H' Y+ T9 t

+ d  ]: W+ S7 x2 x, j( }

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


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

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

   

关闭

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

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