我的日常

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

动态微博

查看: 2208|回复: 0

Oracle增删查改 day01

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:40:09 |只看该作者 |倒序浏览
数据库: DataBase,DB( R6 Y! ^0 m# p& ?7 C
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。% X) J  ~% n! z
oracle是一种数据库软件。
, i) u2 l" T/ t1 @& U( n' Z$ Z% d
Oracle  db2(IBM)  sybase(sybase)' t9 S$ ?/ [' S
sql server(MS)  mysql(Oracle): Q) T) @3 B" p; ^  A7 q) v* Z
access
4 q4 {8 {: ]4 M1 n
4 G9 y- l* ~  c' d+ |, }+ u, N+ b数据库管理系统(Database Management System): DBMS" }6 z/ |: F$ ^/ X

0 F3 _  i+ N9 P- ?& K' HSQL:Structured Query Language$ e4 t  x8 p, j' W0 O7 t2 i+ ?
结构化查询语言:和数据库沟通的语言。
& _, b! h4 f) d6 Q0 L7 I: G
2 c' v; Z/ _9 i, tDBA:Database Administrator 数据库管理员
$ e' k0 r' m6 r  g# H
- ^4 V- \& \8 m, c: [4 ^. \9 YTable:表:数据库的基本存储单元7 L7 u# \- h' g" v- A0 {1 V0 l: ]
横向:行,row,record" i, O1 e/ ^- K
纵向:列,column,field
: [3 u6 K7 W; t0 ^, x, l3 h
% F" X: ?" i+ d( V' o0 x" q任务:把用户数据存入数据库的表中。
+ w) i; O; q2 h实现:. |' U* {$ V7 d
1.建立一个连接0 g8 `6 }9 ^3 d% a2 g# y
1)数据库所在的服务器的地址:192.168.0.26
% t: d$ C  i" j# |telnet 192.168.0.26
. D) \& X' |+ M服务器的帐号/密码:openlab/open123
7 A" _# |6 E# E' y+ Y! X2)数据库访问用户:
& @, Q) M" N0 ~# D  C( b& Eopenlab/open1234 \' i- m6 w' R
数据库默认帐户:scott/tiger: F2 J6 |) q9 |( s- ~0 f# F
3)oracle数据库的连接工具:" f1 H% w- g5 Q5 C( I5 l5 J
SQLPlus:Oracle数据库的客户端工具, c) e! k) d. G, Q* E
位于数据库的服务器上,192.168.0.26' }1 K) S# l, I# G3 S) f9 \( m% _
$ sqlplus openlab/open123
) _5 R& |3 b7 w; ?% J, YSQL>
( n) w" L$ A, T) R如果提示SQL>表示登录成功
" s& \7 K$ k) g- N7 n$ u9 U! m+ ^, F) L7 B

+ ]3 Q# r6 t+ ?6 U; q; d( }1 a# b$ E2.把数据表建立起来。5 {( j, g" V4 z1 o$ O
定义数据结构:7 _% ~! O0 @& H& f: X+ F0 T
create table user_ning1(
3 v0 {6 I- [8 z8 \# L# wid number(4),
3 d# C0 m* G, h% Spassword char(4),
; s4 [3 a- h- Rname char(20),/ Y: o+ o8 e2 u: \
phone char(20),2 s6 I2 w& S7 M- _
email varchar2(50)' Y3 Y1 z( Q0 t3 P6 i8 ~
);! q1 t4 q$ ]. _9 v6 O2 B
提示Table Created. 表示表已成功创建。
1 w2 E4 p3 h2 v% u3 O& b
) I2 s" Z( K/ |) k数据类型:
+ h/ a& }7 G: F2 H: ~8 M0 x) Q$ M1)数字:
% x: Z0 e* d( `1 g, l+ ]# g3 Bnumber(n),最长n位3 Z4 C) a2 V* ~1 d( |& T3 h, L% B4 T
number(n,m),最长n位,小数点后m位
8 f; @. J0 S1 B( ?9 ~number(7,2): 99999.99
' `7 C8 B$ D2 n+ I% |
: Y8 b/ I9 q4 t- L7 @% w% f2)字符串:
; ?. K7 c" h+ F0 _0 J0 Uchar: 定长字符串% L0 o4 l8 Q& a) N% u% k" Z
varchar2:变长字符串; k5 U8 s2 O$ w0 g# \
char(10)
! h& {' Q7 x6 N; G+ N4 {/ v; M8 lvarchar2(10)+ B) G1 e, T, I# K
3)日期
: g2 y2 _& [( s2 ?! j' C9 ?0 D8 ]date
* i: |: M2 K* J( V: ^
3 @" s! c; C4 ]2 t/ Z清屏: clear scr7 ?/ U& G' M, C& F7 l1 f+ f5 T
8 }% ]0 Y( S2 C- y! {+ C! f
3.把用户数据存入数据表中。
% D$ f9 i3 \) b# R0 `* s% ^$ ESQL>insert into user_ning1. {# |3 A! d8 D; F7 X
    values(1001,'1234','liucs','13600000000','liucs@sina.com');
5 x; D$ n, d' t$ }& V4 H% L! j1 ]9 j
insert into user_ning1 values(1004,'1234','liyi','98765432',
) n4 T8 U% ^+ ~2 c5 ^'liyi@sina.com');, i7 Y: R# a& R  d- d. I
$ [+ U$ ^& W1 r9 K0 V
错误语句:
9 T5 {3 I3 s  V* S: Tinsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);5 Z2 Y/ ~  w% k1 w

# {! c8 |( t2 P& s三种SQL语句:
, n  Q& k6 X8 b6 d1)create table..., ^2 d7 ], u5 U  x4 L
2) insert into...values.... _8 r" G- ~8 F7 k* ?) K3 g
3) select ... from...5 r! X  K# N, L9 R. i

' m. P/ P% k3 |6 v  E8 `  D6 ]: OSQLPlus命令:0 F0 s( I8 P/ m* _' `& m! T
设置每行数据的显示长度:
5 M& S  x' o  t. v8 o* S* W+ MSQL>set linesize 2008 R1 z( C! I% Q
设置列宽:10个字符
' t1 k% C* b" e; n9 z# gSQL>column 列名 format a10
3 w( p! c8 [: e6 i查看表结构:desc:describe 描述/ S- b- o$ X+ _  f, B  t4 D( O+ ?
SQL>desc user_ning1* n5 _$ p# e8 Y2 z

- e( I: p) N0 k+ Y规范数字宽度为4位:& X6 U" J9 }1 P/ B  r
SQL>column id format 9999+ Y7 k' j: E% c
简写:
' R( F5 \1 T  \; V( ]SQL>col id for 9999
# C- K' C$ S. T$ p" Z
% y3 T1 D" Q: K6 @0 q; ]" @  y( {--*表示查询全部列4 P3 t9 m9 w# a8 l
select * from user_ning1;
  z" w6 |4 _- \# p8 @& S3 p! }$ y0 [: M/ k+ z
select name,email from user_ning1;
: w* A$ X* b3 q4 r! ~! R5 r; _% I. B. U- S( e6 J! u3 D
--查找1001/1234考生的名字?* l7 c/ g! T2 o" v
select name, email from user_ning1
3 J' k$ I5 W$ v9 [) m" Q6 K0 |where id = 1001
* m* M+ c% ~+ j, U+ b! F1 u  Y8 Zand   password = '1234';
" M# E4 h0 |1 w2 b% q
/ I: l% z9 o1 f0 _! h5 v数据准备:4 r; a+ Q% r: V6 Y+ E
1.表dept_ning:
0 w0 b/ r8 P( B9 |6 J9 Pcreate table dept_ning(
4 p: y9 J( P  A* W% J4 ]deptno number(2),
# `, ?, G4 }7 O9 Q; z3 Edname char(20),
9 Z# D6 }" w, _$ Klocation char(20));% d: r( @4 P0 O# x) @
0 G1 U  H9 z% z) [8 U
drop table dept_ning;
( Y$ x  m, l6 y* J& z7 x( x7 R2 `4 q/ J
增加数据:# b7 `' A: W  d& Y
insert into dept_ning values(10,'developer','beijing');
. Y5 M. T! W; r, t! z5 }insert into dept_ning values(20,'account','shanghai');+ R+ f5 P6 p# s
insert into dept_ning values(30,'sales','guangzhou');
$ Q  l0 X9 a% `insert into dept_ning values(40,'operations','tianjin');, d% I! p; w, }4 C! V! d
% V4 @6 r1 r+ @0 \5 X6 Q
commit;
) M- }. A3 I3 f+ V& p, ]5 n) a2 h0 ?8 D
select * from dept_XXX;
) u$ }+ M- }( Q( z( t! D0 A9 r& N+ P0 w0 y( ^2 E  o1 u
2.emp_ning
0 {$ Q+ v/ \1 h5 M0 i* g2 h8 acreate table emp_ning(
. X( n0 O8 U( \( }% n3 \3 m- E% nempno number(4),
( b! g# e( Y$ ~. n2 fename varchar2(20),
5 L9 T/ h- E9 |4 Ajob varchar2(15),
$ w1 w, i: F0 j  ?salary number(7,2),
8 w  o8 k* U9 l' |bonus number(7,2),
3 n+ x- w: b2 m* J* g5 Ghiredate date,
1 u; M: {% L+ ]0 _( ^  y5 K1 Tmgr number(4),6 g( X3 U, x& s' i6 P6 x
deptno number(10)
) ^" d" X4 |7 ]  i9 ]  i3 R);$ X% e% G, a0 I; A( Z

( c, e6 x; _# f& ^6 }, I3 x& z* cinsert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
1 E8 [3 U: |, finsert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
8 [/ y7 e# ]- O9 N( Z+ V; w( r0 Yinsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
7 C) n* w( h8 n- _% F5 @" ninsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); " ]2 Q! K4 q# A( y; R
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
4 P  f8 I( ]8 @) r& `8 Sinsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
2 D0 j% L) {5 ~2 F: |insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
5 @" h2 n* O2 c2 {9 Tinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);* L8 X! P0 ]1 w
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
% C/ w$ r8 |" z) M) G; f& Iinsert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);' }0 _0 d1 y2 u( o

' F( R  v. R' h: N" N) ]set linesize 150
$ U& [: Y$ S5 B3 hcol empno for 9999
2 [8 ?6 z  |( r# v& u2 Ocol mgr for 9999& G; C5 {0 s  M+ g7 J
col deptno for 99
/ r0 }4 o1 r% K. x! ^1 Tcol salary for 99999.99; u6 e: Y: s( c5 G
5 U' O% X# c- J2 b
select * from dept_ning;  J2 Z$ L3 s# O' r3 o9 E
select * from emp_ning;
# k; n- ]' }3 Q. a
4 C4 v( g( V4 R" I! U, U一、学习查询语句。" e2 y+ r' V8 ~$ I
1. 计算员工的名字、月薪和年薪?
8 [: e. y3 N  i* H1 q4 A9 {select ename, salary, # L% c& \) V8 b( V
salary * 12 year_sal
; c8 g3 _" \" l6 m5 K8 u9 _from emp_ning;. F+ D8 ^8 ~0 M9 ?0 l2 C. ?
* b" n& Y$ E4 [7 T0 {- t4 L9 \
2.计算员工的月收入?
* g: U5 ^5 Y4 R% @% u. _空值和任何数据做算数运算,结果为空(null)
& z3 p- \; s' Z5 w- Y) Y& U0 N7 Bselect ename, salary, bonus,/ O! I+ Z4 H% y( L; K
       salary + bonus month_sal
9 W" a, W, H5 |! P" a, a- m' S" Zfrom emp_ning;: X( F. B  P% U- V2 w  o
" L; T' d# V$ E# {( S( w
select ename, salary, bonus,
! Q, u- W8 X' k) k) C6 t$ g# U     salary + nvl(bonus, 0) month_sal' h) k/ B0 `  N7 n, u
from emp_ning;* l2 e( d1 L: f( ?. y& N

( q; C6 ~" U4 e/ R- A- l7 Epublic double nvl(double d1, double d2){
" r' ?" u. R- f        if (d1 != null)9 C7 J1 z0 Z8 m2 z6 m
            return d1;# j4 E: A( O$ W+ D( u
        else . s* e$ q6 L- `. T5 U
            return d2;      
, G  b( \3 F/ S. q' A$ s: v}
" e2 x. \- Z1 u' r0 k+ ?- B& I* Dpublic String nvl(String s1,String s2)3 ?7 b; C$ l2 W6 c* D& B: Y! l
{
6 x4 f/ ?0 c2 Z! O        if (s1 != null)
8 r) l  e) a9 K  p5 [( u' K' d! a+ z* ]                return s1;
" d; i5 M* ]7 n; u4 \6 K; T        else# b; ]. z" i" v8 h  d' A
                return s2;
$ ~" [- X: [/ z# \0 \2 |+ X% O}
) \  F2 H2 b' o! h& dpublic Date nvl(Date d1, Date d2){
2 G6 B7 @$ |. K/ h6 Y        return (d1 != null) ? d1 : d2;
6 h( h8 H7 m8 x6 ?}
- l' i7 `' e/ w, k% b% a
9 V& {# v* I; xinsert into emp_ning; q9 v5 \6 i/ N
values(1011,'余泽成',null, null, null,3 ~! m' \+ M3 h
null, null, null);' n4 a- {) J7 v
简写为:
, V# f- i# v9 z! |5 s2 D- jinsert into emp_ning(empno, ename)( |! g( Y5 O; n$ @: d0 Y2 G5 T
values(1011,'余泽成');/ C1 {2 z; x$ h5 |0 Z+ ]  X8 [

9 P6 _" b" B4 n) B. h  P1 Y/ O: Z查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。7 T( H7 Z& A$ d/ I  ~
select ename, nvl(job,'no position')
( l5 E7 `+ U. ~' K* s8 ]1 x5 ?& ofrom emp_ning;
1 H1 [4 [5 n+ L+ r* `% r7 o0 S( I9 o% i# t- ]$ T4 V9 Q3 |& J
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
% C: @! B6 @6 R% t$ N" H6 Z( Aselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;) m. q- k0 m4 j5 Y

8 Z4 v8 k6 ^% U8 Knvl(bonus, 0)' M% u+ T! B/ `4 e
nvl(job, 'no position'), V3 R' z: D5 }8 O/ o* J* }
nvl(hiredate, '10-OCT-11')
! d0 C4 a8 A  A0 F9 y- _
1 d( A; I3 C$ b) y, P--复制表emp_YYY为emp_XXX( }8 j* L& W+ H* B4 b/ u
create table emp_XXX$ G+ J' x, C) V  m5 H
as
" |* q) M; |! P$ H6 ~select * from emp_YYY;: }. m8 }  M; H# o+ H6 {

6 W& @# X, b( m; B- X3. 机构中有多少种职位?0 E; N& {8 F: R) M' \
select distinct job from emp_ning;
: f. \; @- k& t7 I; O! F/ ?! }( K' c4 g. ~6 @7 j- D% v. I' p5 e$ o" V7 J
员工分布在哪些部门?
/ @: v" w- w3 n8 [% w7 M+ Rselect distinct deptno from emp_ning;
! Z4 ?" G, T) \: V& y/ X9 p  k3 O! O0 S
distinct必须/只能跟在select后边。
: R! l! \" ]9 |. a0 `+ j: \" Q% ]  w$ g/ A
4.薪水高于10000元的员工数据?
% o: q! I3 N! @! X6 G- vselect * from emp_ning
1 S8 r4 E) {, d7 R8 o9 xwhere salary > 10000;, K! l5 }$ q5 K) k, I+ v
, y. |3 [! ^3 P1 w
5.职位是Analyst的员工数据?
7 E( @, J- r3 D: L6 G" nselect * from emp_ning/ o5 N! j' K6 a- @' }* ^
where job = 'Analyst';; w1 @, m+ l- G# R9 D3 n' J% p  v

9 m# U' D/ }( `5 }analyst  ANALYST  anaLyst9 Q8 T4 F0 g9 J4 d! k

& q6 Y8 y" L- ]( C; Hselect * from emp_ning2 i1 Z2 f9 i3 U) a& y* z2 l1 n: z
where lower(job) = 'analyst';2 i0 P5 @, i" D4 ~$ }$ {! e  y

% d7 @: o! v, ^$ ?8 `4 u/ \select * from emp_ning* R" P9 \' G, H1 D% B, A% U! ^
where upper(job) = 'ANALYST';. r7 A5 c/ i2 K  b4 R6 O( Q* u3 {

, |& k8 x% G- ]& O  m; t--如果数据是analyst,查不出结果; h+ c6 d! c1 P6 n3 f+ c
--SQL语句大小写不敏感,数据大小写敏感
- C: F. B' }- g: K0 Y8 v# _, l0 S0 O' Y, _1 o
6.薪水大于5000并且小于10000的员工数据
4 u, H, u5 U* [
, D* A( a0 i) p% N! E0 x. M2 cselect * from emp_ning
$ r# |. X; B0 Z" Lwhere salary >= 5000
, f3 y+ ]# t" S9 u$ q( g& o1 E& uand salary <= 10000;2 h# I! T- p" m

9 U; E, x2 H# c; F+ D* @--在区间中:between 低值 and 高值. h: o/ k! N! I8 q$ c+ g2 n
--闭区间:[低值,高值]5 j" Z$ C! P" A
select * from emp_ning; p( A1 h5 G! r
where salary between 5000 and 10000;  P3 h0 u/ y9 q! c  \8 W
% B8 d% {. c8 f; P$ K
入职时间在2011年的员工?& F/ s# L2 ?5 E; H: x8 F+ L
['01-JAN-11','31-DEC-11']; k, y' o, q+ p; ]
select * from emp_ning( t& l7 p+ `* _, A# g
where hiredate between '01-JAN-11'! P- A* K) r1 n; L7 ?7 ^
and '31-DEC-11';
* |0 m& w, o5 d# a. Q/ W4 I' W7 _5 b/ l# y7 g
7.列出职位是Manager或者Analyst的员工
- @# y9 V* R: Y3 R: A6 r- _/ |1 y/ i7 o
select * from emp_ning/ d9 R0 s5 `! a% }4 i# m2 {, ~
where job = 'Manager'- K1 `/ K( y  _5 Y" t
or    job = 'Analyst';+ u9 m+ e* K: K* a
--等价:in (list),在列表中。
! Z  W' P5 C1 ?* M  f& kselect * from emp_ning% @. n& F( M8 S) \
where job in ('Manager','Analyst');$ o9 T/ S, ~4 ~

2 y: Q/ Y& s$ |2 m1 e2 J8.列出职位中有sales字符的员工数据?
# c! L& n$ T& @8 X2 Rsalesman
) g: N8 v9 b9 i  N0 E; [. _sales7 D: x7 R* N. d
before sales% Q" k9 v1 i( \! @  R
after sales. S. i; Q$ o# ?# B. \; u
before sales engineer
" `% h- Z7 I) `" F( k( `
  L8 Y$ K! g5 E2 K+ I( j7 F! p--%: 0到多个字符,跟like配合,模糊匹配
  Y8 P6 Y0 U/ M: b! mselect * from emp_ning
! [' w  O. z( A" z5 r$ Awhere job like '%sales%';( a( x2 V2 a+ N& H. c

1 R, H" ?+ D3 S' i' j9.查询哪些员工没有奖金?
' w3 f0 I3 g7 u1 E6 Q- ~select * from emp_ning
) p1 g0 [6 P0 i8 X, R+ uwhere bonus is null;
' W- z7 R& s- s: w" Q/ N! f: g4 C, Q  F- \8 ?
哪些员工有奖金?
( R6 G" c7 k% {- Iselect * from emp_ning' V; i7 I9 F% i( h5 i
where bonus is not null;
+ I$ v6 [8 s; f' ]) L! T1 R
+ `# I& K5 \6 |, C小结:
0 v/ {( L2 x* S- m) N  k1)create table ...
( [5 k+ l+ Y. C, `  drop table 表名;
) [! {: D, l! _) J3 w2 ?2)insert into 表名 values(...);
! H$ L$ ^5 D% E& N7 y3)select distinct | * | 列名 | 算数表达式 | 别名& [4 V+ A9 p& K: w- D
  from 表名
* t7 A* H* c3 x; g" ^  where 条件1 or 条件2 and 条件3;1 D* r6 ]5 x/ c
, O# [  Z. f! k. n+ ~  o2 h4 {
> >= < <= between...and... in like4 w1 L  T8 m8 T5 v5 Q

, ^- e; ^0 Z5 ^" [! D( J9 c: E

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


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

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

   

关闭

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

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