该用户从未签到
|
数据库: DataBase,DB
& L5 ?" q5 Y% J! {! a0 e存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
$ t; W& N. Z: Soracle是一种数据库软件。0 d v d& A2 _* t4 z5 C3 A- c- E
; u/ f7 N1 c% L/ F% {
Oracle db2(IBM) sybase(sybase)2 w* k8 X* g# [3 m+ {
sql server(MS) mysql(Oracle)3 n( ~' L! ^2 ?& W# u! Y1 d
access. U" O6 o+ m R
( x( I$ B+ {% a9 X" l& D数据库管理系统(Database Management System): DBMS
3 K2 l0 Q$ g. G/ M( }. L
/ J- w4 E' |' H. o5 v0 W* m5 C3 QSQL:Structured Query Language% \4 ]! h" d& {! D3 A- J4 |
结构化查询语言:和数据库沟通的语言。
+ u8 s) b0 u9 e1 Y7 s% |, o6 m+ w$ W" U* J0 ?1 I
DBA:Database Administrator 数据库管理员
2 U) E# `! y# t" f J: ^5 C( X: ^$ H, ]
Table:表:数据库的基本存储单元- Y3 x, D% }2 K* k% L6 n$ m2 N
横向:行,row,record, L$ U9 a: A& ]% p
纵向:列,column,field
2 F4 I; f/ A% ]1 p
: @7 K* S% |, N任务:把用户数据存入数据库的表中。/ k& g+ y p# B
实现:
# P0 v& p9 r6 c9 I1.建立一个连接: |! u2 Y3 g7 W$ D" C5 X' A8 q+ b
1)数据库所在的服务器的地址:192.168.0.26
+ U8 [3 w' @( `telnet 192.168.0.26* X& m0 E" k. T" y5 v" g
服务器的帐号/密码:openlab/open123
5 Y5 O: \1 Z! N; S& Z' g( }2)数据库访问用户:
- F$ ]- ]; o! a0 F. `3 q: Topenlab/open123/ b# ?/ e" P, k: [3 X! r
数据库默认帐户:scott/tiger8 K/ A1 ~/ ~% y7 R$ M, f# q
3)oracle数据库的连接工具:
1 F3 k. I8 E* n e+ [& GSQLPlus:Oracle数据库的客户端工具
7 i5 B0 H) r9 R4 M% c位于数据库的服务器上,192.168.0.26
; N# U- P& z0 w$ sqlplus openlab/open123
5 p1 h5 z7 h1 A! s8 s3 e- F* f" ZSQL>
; O! |6 N1 J9 [' t如果提示SQL>表示登录成功6 x; |# \: m0 h# i1 u" E% l1 `
6 Z- m4 Q" b' ?' d
1 b- A- w* o/ R7 X! r) q
2.把数据表建立起来。
1 x" a6 H9 K$ e* d3 j( |! e定义数据结构:: ~* x, m/ Y1 ], A7 f
create table user_ning1(% m( P6 {- L6 a
id number(4),) B3 b" ^- F7 _
password char(4),
6 J' s9 n1 ^: uname char(20),4 l. w( G9 p2 K
phone char(20),
& P: V$ ^1 I/ eemail varchar2(50)8 b0 t {. a5 [6 }+ c6 B
);
~1 e* G/ _0 d9 B提示Table Created. 表示表已成功创建。
7 C# r" ^( n! E3 Y. z8 c8 ?8 h( f9 m6 c( c$ B9 ]( f
数据类型:
: k" |. I j" a" W1)数字: # m5 ^, [8 Q5 U0 J. k; Q2 C
number(n),最长n位
7 E% R6 t e' P# Fnumber(n,m),最长n位,小数点后m位
/ D4 D$ f! G# V$ D9 B0 Rnumber(7,2): 99999.99
& w) J( P2 \6 h8 a! ~ x
/ e' x: \& N3 [/ |2)字符串:) L/ b/ f6 p9 S! s, d
char: 定长字符串
9 E! N, J, T6 a1 A5 D, `varchar2:变长字符串
3 r" z0 }3 S- G! zchar(10)
. n0 ~1 N* N9 x( [# ovarchar2(10). S% p# g7 h7 m- R( O
3)日期: j! A0 A' A1 R0 K: v$ J4 ^; J. t) h
date T, u* W; h( m/ \' }' n6 Y
% G- i0 H8 W9 y, N清屏: clear scr0 J h7 E \, t+ Y3 x' e7 ?3 v
' F: X5 H% e9 O! e3 ^
3.把用户数据存入数据表中。
( b; q5 R2 Y& V* I0 rSQL>insert into user_ning1
; i( P$ ]/ D9 x8 t4 ` i values(1001,'1234','liucs','13600000000','liucs@sina.com');* J u7 v: i: N2 o6 |
% ] U8 x2 D# qinsert into user_ning1 values(1004,'1234','liyi','98765432', U9 E; C' w" V+ J
'liyi@sina.com');( z2 Q% W$ f4 q' B- d2 B( U. P
( u8 R5 Y; O: F 错误语句:
9 b* q4 I7 ^3 H2 W& l1 einsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);7 |, D. U4 m5 X& O3 n$ M1 L3 B2 a
9 [8 f/ L, ~* m. i( i, v
三种SQL语句:
3 K4 q" c) q% n( J$ F/ e. R Z1)create table...
) M; r9 b4 i9 X. U& i J" l: i, S. B2) insert into...values...
. O" ^# E) a- ]4 L; o3) select ... from...
9 Z' W6 A$ Y. u1 f E0 o. Q/ D8 }" N* r( p8 y% F( U! H% G
SQLPlus命令:6 d1 h$ p) l( n
设置每行数据的显示长度:( T8 s( {* m# m! L: I
SQL>set linesize 2000 x. ~/ {) M' g
设置列宽:10个字符$ H- G8 n; Q* F3 ^1 E
SQL>column 列名 format a100 i S: n1 S# v8 N6 O
查看表结构:desc:describe 描述; N9 y( r2 k+ J0 q- z" D
SQL>desc user_ning1
4 R# u6 u& {* D2 B" B1 X9 s7 p6 a2 Q% x, r8 R% e0 ?/ U
规范数字宽度为4位:9 F' B& R8 \* B2 H* a1 f
SQL>column id format 9999
5 ], j* L8 m/ v' D简写:# g. a" m4 R! _$ B0 S; J- B
SQL>col id for 9999' m! n4 I! S0 u: ~7 p" M. e' }
& i7 N7 B; V- }+ o- U: m
--*表示查询全部列6 G7 ]6 b0 O, }6 K6 z l* K
select * from user_ning1;
+ M" @0 u: k- s) T/ Q9 g; y* U' t6 \+ R
select name,email from user_ning1;
3 b) }+ M! t0 |0 Y& N
' A8 ^7 R, ^8 s5 T) D--查找1001/1234考生的名字?
, r- N) H. T. L8 N% s/ \select name, email from user_ning13 @. Y- k% @9 U/ a, A( }
where id = 1001
) ~) E# w- J, C4 iand password = '1234';9 `6 g0 |. ^4 f" i
+ i6 A5 l9 t5 ~+ \! F7 v* o* P% O+ h
数据准备:
7 L; H) ]8 [+ ]3 B& p1.表dept_ning:
) q# M# ~1 @8 ^& B; Y5 k6 d9 u \# z1 ^create table dept_ning(
4 @! w+ l0 ~9 O4 x5 D3 hdeptno number(2),
8 ?3 g) R" c2 |: n8 r2 mdname char(20),
( ~/ w8 s$ ~3 y. y [& U$ c- Dlocation char(20));
2 _' W1 l4 w# V( u( e, O5 Z' k% A9 P2 p- v% j3 Z+ D
drop table dept_ning;- R8 C7 b& R E A
0 d! t) U% \ L& |: S7 W
增加数据:
$ s, w+ q6 \& jinsert into dept_ning values(10,'developer','beijing');- ~- ?2 K, @' }. s, M+ h1 v/ F
insert into dept_ning values(20,'account','shanghai');5 g& z1 ?: U6 |4 j& |
insert into dept_ning values(30,'sales','guangzhou');
8 [9 [ ]; s9 m5 uinsert into dept_ning values(40,'operations','tianjin');) I8 d" i! M4 f+ [" i
# F) ^1 P- _& Y8 a$ \
commit;
* e9 d6 ~# z4 ^# l" D$ |5 T1 H8 Y3 C5 S& |- A
select * from dept_XXX;
7 }% J. f3 ^: ^1 k$ `+ M0 Y: D1 [& t1 q% u9 [& |9 S! D
2.emp_ning
. D2 \- c3 f- Y, ~/ E8 a+ icreate table emp_ning(9 r7 g, l" V9 s/ Q
empno number(4),
0 x! o. B; |/ T0 l1 S3 s3 nename varchar2(20),
" V9 P) D+ s/ w2 t; njob varchar2(15),
: h" m) l# W1 F5 v1 m! lsalary number(7,2),
, ^$ @$ H$ O1 f2 _' q: `bonus number(7,2),% j# ]. b: q7 x! s9 G/ C1 l# C" s9 o5 @
hiredate date,0 F" J1 i# |8 ~# b5 v7 u, D- d
mgr number(4),
3 v6 h ?! ?) H) B# S+ h/ Z) }deptno number(10)2 n8 p* S- P5 Z; m9 x
);
8 C! o; g6 Q& P
* j5 ~" f% |6 X2 Vinsert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);6 j1 N$ e1 o9 L: V$ Y
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);
8 V: W1 E$ t( minsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);
- k, }" |1 C0 g" U' einsert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); / R: h F, C. D& C8 M% w
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
1 ^4 B" W' ] h( Einsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
[) t6 Q R4 f& g5 f$ Hinsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
3 U/ [ P8 c; H. n: F3 B) Finsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);7 W* \/ w9 j8 z/ f
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
/ W; U, ^$ E( {& B0 t5 jinsert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
_2 V3 _9 T" H, L7 u+ C3 b% a4 N. A7 v& a( n ?& D
set linesize 150
2 T5 C0 ]& C8 @% H" ]" j" Xcol empno for 9999
/ q$ [- ?# H6 U7 Ocol mgr for 9999* b2 ]! L1 Z; x4 g( K4 f
col deptno for 99" B0 X6 o' W; G& V4 n* b
col salary for 99999.99; k" f; [' m3 l G- |% n2 \
, ^9 o, Y) X" K0 j" V' M, ~" G
select * from dept_ning;6 i \" `9 u* r" e" {# S' z
select * from emp_ning;
& c5 ]0 t; W" m/ a" A' ^
6 _4 g+ E F( E2 p' P! X+ R一、学习查询语句。
* t' g2 W% n( K. `( M: s1. 计算员工的名字、月薪和年薪?$ t' {0 H! ~7 B0 F* [( \# m
select ename, salary, . P: h, P$ x: r {4 h) i# G/ O! O
salary * 12 year_sal5 w/ Y- X/ n9 A; \: m* T
from emp_ning;& K$ O& S9 o7 x; ~3 E) N( `
, v) V8 P/ ^' N, f9 q2.计算员工的月收入?
! c' l5 P0 ]3 r) G {5 ^ r. y2 r空值和任何数据做算数运算,结果为空(null)
- r+ Q4 |5 C0 d6 E/ pselect ename, salary, bonus,
: | ]# ?" B- ~. f! Q8 m( n salary + bonus month_sal, U0 w" X, m4 l Z- ~
from emp_ning;" I3 z. G. x* H
" F, x$ {! k7 e$ S1 ?9 Gselect ename, salary, bonus,0 q a$ Y/ C( ^1 W
salary + nvl(bonus, 0) month_sal7 Y9 z+ e! y. x# r$ k" z& ^
from emp_ning;$ Z7 r. A* W/ X( ^) R% v" o, C
% p& I& W7 h1 ?& L! upublic double nvl(double d1, double d2){
0 f, [0 I! n: n* I8 l% m if (d1 != null)
2 V; j3 i% X3 O# ?6 P3 X return d1;
g6 T1 ^; d% f3 H" M7 c else 5 i) A, f+ }9 K! P9 @9 C
return d2; 4 K9 u) N6 n& h$ a/ J
}. O+ d7 B k) t7 }
public String nvl(String s1,String s2)
% Z$ p% O: F `# @* k4 m2 J{
$ N8 ]" B/ i' M4 U5 I if (s1 != null)2 \ |. g' o2 ]9 y6 N
return s1;
* n0 b2 n- r! Y/ i9 W- d1 K" l else
4 `4 x! ]" @" L, b! c: T return s2;
0 J5 o8 s( Y- X) {5 m- p, s q# p}% M% t( Z2 N, x
public Date nvl(Date d1, Date d2){5 x) N( M* K6 Q9 g
return (d1 != null) ? d1 : d2;
5 v) V; k& g# V2 z}! O9 {7 L" C- |
/ B6 Z ~3 m1 |* p& R: _# Qinsert into emp_ning
7 e, g$ x: ^3 [2 dvalues(1011,'余泽成',null, null, null,# S) M8 Q f+ A( P
null, null, null);% e: k% e' H6 t& j& K
简写为:
* q, w2 X% l% @' ]6 c$ linsert into emp_ning(empno, ename)
W+ E0 |/ @; Cvalues(1011,'余泽成');/ F/ q2 X ~- _& h1 J" Y
0 m3 ^/ z6 `/ X4 T- C查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
1 W: F" \" ^. V; d4 _4 Jselect ename, nvl(job,'no position')6 s5 V* ]7 t2 y: N
from emp_ning;. u7 E0 ?, w1 e* v7 n C
8 f- d7 t$ Y( T% ]* i0 m查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
+ U, b8 j/ r# h1 C' A0 M" g: xselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;
) F1 u1 h. Q) W+ r' g; x C# Z( {0 C
nvl(bonus, 0)4 W6 E% V. A- W/ t& H) d2 D3 |
nvl(job, 'no position')
. j. Z3 t) y3 r6 B5 B( Rnvl(hiredate, '10-OCT-11')' C& A: z, @' B3 Q( m; T
; I* y" D& e; B9 A1 [- a
--复制表emp_YYY为emp_XXX
& H* p8 I# B) mcreate table emp_XXX
& N O. G% R) _8 ?5 Oas
& x! C0 D; v2 g8 X: pselect * from emp_YYY;
" V9 Y0 _$ |( Q" n6 D) m$ k$ q6 n: h3 S( o* G
3. 机构中有多少种职位?
0 U' t; q6 O: h' D! {4 X* ]select distinct job from emp_ning;
9 |# w6 t _. k. H8 p: ^/ z0 D u3 t* I6 T% t4 G0 Z0 q
员工分布在哪些部门?
# z3 b; {, u$ n0 ~6 [. G% Wselect distinct deptno from emp_ning;
8 U* v1 T" M3 P+ c0 {, L* ?8 L& z/ J( Z- ^, D% B9 r+ D
distinct必须/只能跟在select后边。
! T- G a' c% ~ u* j& K
3 s3 g/ ^9 X$ [+ d4.薪水高于10000元的员工数据?
9 i" Y5 W6 N) f8 E7 i* gselect * from emp_ning
$ a" ^9 C" F) J, M; c0 Pwhere salary > 10000;
6 z; ~! M! ?- n) |0 P3 i* `
5 t! ?1 y: p# K2 L6 \5.职位是Analyst的员工数据?
7 u) I+ q1 V! V0 f# jselect * from emp_ning+ c' f& E7 Q" y( F2 D
where job = 'Analyst';
! a3 M% |7 M4 G5 ^
( g$ b2 M$ p# U1 Y$ }) Vanalyst ANALYST anaLyst5 a! J' ] v) ], S% g. I: ?
# R( }; Y& W" A. K1 kselect * from emp_ning
# V4 ~" I! f; \# |where lower(job) = 'analyst';
1 V/ ^+ \9 R/ p, A& c6 n
- e: P# E. { `' y8 eselect * from emp_ning
/ k- R8 T, b# r G6 C7 Ewhere upper(job) = 'ANALYST';
7 O4 `1 G# m. z4 k& ?4 g r" T5 D0 J6 _' Z+ U5 j! T
--如果数据是analyst,查不出结果
- \ w* `: D Z& d6 j' c--SQL语句大小写不敏感,数据大小写敏感
2 Y* t3 d+ {0 N, v4 _ A5 O2 c) d) m: l
6.薪水大于5000并且小于10000的员工数据
- o( P% G$ u0 \1 X, y+ A+ @1 L?' x5 H: N2 B$ {' m q5 U N
select * from emp_ning% r- H- r+ B$ t& D" V% S
where salary >= 5000
. B3 c6 g T: }! q$ sand salary <= 10000;
4 o# k* c. y1 R$ j/ P4 t3 V3 v) q/ Y, F3 b( X
--在区间中:between 低值 and 高值/ ^. Q4 z6 I7 Y
--闭区间:[低值,高值]9 Z0 M+ f7 \- W& ~: n
select * from emp_ning
x7 Q8 B7 }' Z0 V3 kwhere salary between 5000 and 10000;
& y4 ?8 I; d3 I& r7 |( m2 [
6 E' ?' H, [8 y8 U$ @入职时间在2011年的员工?3 _9 C& D" u% _, _1 z
['01-JAN-11','31-DEC-11']
1 [; ^5 ~3 I! eselect * from emp_ning7 @+ D9 A8 Z' l; E
where hiredate between '01-JAN-11'
x. q" M8 S+ Fand '31-DEC-11';
$ T% x# n* U$ W
0 O( D+ S9 t9 a4 p7.列出职位是Manager或者Analyst的员工; A) i( D7 N$ D5 G2 V" ^7 c; t
?3 U1 p- `6 k4 o9 n7 T9 r' R
select * from emp_ning* y3 c X t( G# z% n
where job = 'Manager'
) ~+ i& {. ], y+ g1 ?0 _or job = 'Analyst';
' Y) Y0 [1 V7 C" l$ q8 c5 g' a, Q6 U--等价:in (list),在列表中。
. @3 Y7 z7 Q' N3 `1 a: {select * from emp_ning
( F! h) B( i2 R1 }0 \) _" Kwhere job in ('Manager','Analyst');4 u3 h0 T. m8 Z& b8 @# [% d
9 y7 s" F' m7 [5 i
8.列出职位中有sales字符的员工数据?
4 w$ j6 w, A( ]) m* lsalesman
5 X8 F, e. ^0 [$ M& E- z& Hsales* e5 g9 C4 U! y) j/ h0 U# m
before sales. L* x. @1 {, u& D& w1 y" I$ [
after sales2 |2 y+ ]& ~5 m; r/ g
before sales engineer' {& }9 S t2 k' Z' i
+ S) e4 _% Q5 U+ ?1 ^7 S# f--%: 0到多个字符,跟like配合,模糊匹配+ E5 `( J' A" e5 d
select * from emp_ning
( ^: O2 E2 e2 |/ w' U# Swhere job like '%sales%';6 ]8 Q9 Y: L7 y7 N8 [2 `+ Z
$ |( s' `2 L% H6 k; J+ l) T2 l/ z4 u
9.查询哪些员工没有奖金?
& t& A2 m2 C; _+ Y/ K- uselect * from emp_ning
. u$ v' ]: C& ^0 s# c* A# `where bonus is null;
% Y. }+ n5 |6 m" }- z# a1 H) t4 F: ^4 y# g& k" j, W
哪些员工有奖金?
0 n4 N2 c$ k* H. `2 D, `$ qselect * from emp_ning# \; `5 B: K2 X+ P' a8 ^
where bonus is not null;
. U" k8 L( l- ?% _& n" K$ n: N6 j) a' |; B$ J" v
小结:
; @* u4 _& |1 T1)create table ...
: q5 f! w4 Y6 S: |0 ~! [6 O drop table 表名;
6 S+ h3 a. b/ V4 D8 _2)insert into 表名 values(...);" Z1 m. _; a+ i) Y
3)select distinct | * | 列名 | 算数表达式 | 别名
/ P4 r" @% v' t- a4 Y" a+ v; C1 l% K& ~ from 表名: I& G4 B' A* A- `/ {$ V$ g' c8 @
where 条件1 or 条件2 and 条件3;
8 _3 T3 x" A' K2 f4 ]. {1 r9 ?3 I0 G4 \
> >= < <= between...and... in like
& C, L( u: _& u) f0 J7 `
, w# V o4 G1 r0 }2 {2 Q5 Y |
|