该用户从未签到
|
数据库: 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( } |
|