该用户从未签到
|
数据库: DataBase,DB6 }" N$ ^! B' z8 g! _. g
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
/ {/ b( k' w1 m) Uoracle是一种数据库软件。
$ s4 w3 ^+ F) l7 J# l; E7 [4 f/ _# Y& U. W$ T7 s
Oracle db2(IBM) sybase(sybase)2 H+ ]3 t" s& d% B7 q
sql server(MS) mysql(Oracle)
+ }% Q1 k) ^1 q- b( R. S) k9 `access- h9 Q* F, Q3 |2 t
, M( a/ ~( ]' K }
数据库管理系统(Database Management System): DBMS
6 i/ c U1 B, b) r, ?! N; `; w3 u: k' O0 t0 M6 [" V$ n- H" L- C
SQL:Structured Query Language/ w$ G# G! _8 ~" l, L* q% z
结构化查询语言:和数据库沟通的语言。
* k. s/ s( u8 X. P+ R7 u3 j9 r8 d) P: h* U1 t# g3 w
DBA:Database Administrator 数据库管理员) X4 T1 [/ K9 D! D, o3 c) s
* k6 N; [# y2 P! V8 |1 D3 D
Table:表:数据库的基本存储单元. O. S( J: h, C7 O( P- d
横向:行,row,record" `1 Z# Z, q9 m) l9 z( N+ _
纵向:列,column,field" D1 \( u6 i* j4 I$ O n+ p
4 Z( \$ a7 A% g
任务:把用户数据存入数据库的表中。
0 y8 ~5 h& M" j m$ C& v/ F实现:
0 m9 r) o( v+ v/ w8 q1.建立一个连接
2 r7 N8 W }3 A c1)数据库所在的服务器的地址:192.168.0.26! X1 `: E& f4 d( g: d
telnet 192.168.0.266 }; v/ @: D, I( a
服务器的帐号/密码:openlab/open123
. u. t: t2 |* P* O4 X4 U2)数据库访问用户:
; `/ i1 n& U) H( B0 Kopenlab/open123
7 g- p$ z( O% \' h9 v数据库默认帐户:scott/tiger
, H. B/ v- |- K6 p$ ^1 V: [3)oracle数据库的连接工具:% J) t1 I8 G- r: f- D* s
SQLPlus:Oracle数据库的客户端工具
, Y+ u+ p/ e' h Z i& K0 N( J: p位于数据库的服务器上,192.168.0.26/ a. q( d' m/ s; r( c3 K
$ sqlplus openlab/open123
|5 J3 |1 V2 c% ySQL>
; @3 Q+ c8 e) o7 C$ }如果提示SQL>表示登录成功" b; Z( ]* I+ B# b; L7 \2 l' z
2 z2 }& w: k! t
; R* M. T) G1 ]$ C8 Y: g
2.把数据表建立起来。2 Y; g% b* d& m7 ?4 Z, ]$ c
定义数据结构:- I* h9 M! K) `" H5 R: [
create table user_ning1(/ u+ `! ]* X. s- V7 m6 X( J1 W5 q8 m
id number(4),
9 E) g+ k7 r, V) d5 ?( g ]+ Vpassword char(4),
" p$ g% |: b$ _3 d5 Bname char(20),
! V- P* f: A$ v; R Qphone char(20),& u/ V* |8 c; P/ N$ P* x! H
email varchar2(50)
$ c# [! i' |5 V& P6 K3 E);
! A% q* ^4 Q! d7 ], J; n, H" X提示Table Created. 表示表已成功创建。
8 o' n" I: c4 ]6 P; R5 G6 D
- X9 Y+ q" ]( G6 a数据类型: F9 O( B! Y" R: I. n5 F" N
1)数字:
4 Z; J6 j/ y+ Rnumber(n),最长n位& V4 l, n5 s0 O
number(n,m),最长n位,小数点后m位- `. z) a; k* Q# W3 A
number(7,2): 99999.99
- o! g0 u0 t; W. `+ k$ n) i& o
5 h& h8 K7 s, h8 z0 W2)字符串:+ y3 [" r& P; H4 e8 q6 i0 W
char: 定长字符串
8 R: j( a* S Cvarchar2:变长字符串2 K. G. \+ C: v; z! a* N5 Y
char(10). \7 Z v! r7 ~0 y- Y" Q0 `) c) l
varchar2(10)
4 v4 I: t/ C* U) i7 G$ ]5 N" z3)日期
9 O6 g; n& E( d) n( [( `3 g# _ Z! Cdate
) G( w# t, {) \7 y4 D8 ]" b% n0 X) R7 V8 c W, o
清屏: clear scr
, f% G r4 S0 y7 B1 R2 S7 Y* t. p
3.把用户数据存入数据表中。; y) R; X& P( t, k1 {6 r4 s6 K7 j
SQL>insert into user_ning15 J* y7 }7 A8 J
values(1001,'1234','liucs','13600000000','liucs@sina.com');8 l+ {- S0 C4 X
' F0 w5 \# @/ y9 M% c
insert into user_ning1 values(1004,'1234','liyi','98765432',3 H4 B. C% K, N
'liyi@sina.com');
$ m& A( A5 @" r3 k7 U; A. {3 L
, F5 v6 m5 s: x 错误语句:
# I2 Q2 F- r4 G& L, i; Minsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);1 c: a: e' k4 Z- Y4 K
& T$ v3 N* X6 T; o2 M: U三种SQL语句:
6 [* ]6 j6 M) \( G0 s: D1)create table...
# s6 ?: |( A f1 ~) S2) insert into...values...
; G7 w0 }! D: b# i6 d6 R+ o3) select ... from...8 |3 Y! l( k$ s6 a$ D8 t0 k; a
+ B! m# Z' c, _SQLPlus命令:1 c) K' y* E" z% Z$ ^+ W5 w
设置每行数据的显示长度:
8 A7 } E, u6 }7 JSQL>set linesize 200
. v3 Z0 f; R/ [% Y6 ?- V! z& @9 K( t( k设置列宽:10个字符+ y# N5 {% @- v
SQL>column 列名 format a10- M; s6 [4 \0 m) J! \9 V* T
查看表结构:desc:describe 描述- U) D) h1 ?1 v5 w" @ s3 N
SQL>desc user_ning1) ?3 X6 r6 E$ b& Y3 E
# y# q; b; Y' L. q1 [- w1 _& O; C5 ?
规范数字宽度为4位:, Z' s k" I' u' {* N/ V
SQL>column id format 99993 H4 H2 F* K# a
简写:9 P6 X9 a3 O( i4 M5 }* T4 o
SQL>col id for 9999& U3 p8 d. A! \, h& d4 D6 W8 c
; t; A5 t5 l% v% M; A+ ~2 {
--*表示查询全部列
8 v5 d; R1 ^# ]select * from user_ning1;
$ e) ^% u0 d6 z+ O+ R' y
, S' R7 C# d, h: Hselect name,email from user_ning1;
9 i! I! D; A4 ]' k+ a& I. i+ D3 \% Y9 h( O
--查找1001/1234考生的名字?9 B! H8 t! L1 P4 n
select name, email from user_ning1
0 a; T! M/ i% L' W+ k+ w4 [, Jwhere id = 1001 8 W( x% P6 W1 \6 l2 U% w& `" z% [
and password = '1234';
* n+ j! E" t/ [+ H5 e+ S0 i6 t7 b- q4 e# J
数据准备:
( l2 T6 a) `* M/ Z6 A8 p1.表dept_ning:# d# F& i; Y% w. n
create table dept_ning(
7 g- X s L$ G: P- Ddeptno number(2),. C- ]2 C/ y7 i; C% C+ d+ B
dname char(20),
& k% E9 q: p) ~ u6 ?; n* Glocation char(20));
: n T3 Y% h* V$ I
$ d2 k# s! B3 l2 T! D* Gdrop table dept_ning;. F1 B4 Z7 _4 r* S" U
9 I% e) } a' z* P, c
增加数据:
% G8 s: F; D; B+ Linsert into dept_ning values(10,'developer','beijing');
2 @4 v0 s/ L2 {* W0 `; [insert into dept_ning values(20,'account','shanghai');& S. _ {7 B( C* a# c
insert into dept_ning values(30,'sales','guangzhou');8 X) A0 k2 I/ {; p6 [6 r- ?( z
insert into dept_ning values(40,'operations','tianjin');
8 u2 d1 I+ p' z D+ A5 z" l" W, @* G
. y; v+ z; F: pcommit;
& e. |) t6 L$ W7 C# \7 ?/ Q0 P/ ^" _; D. I4 s( C
select * from dept_XXX;
, o# K. b; o3 X9 y5 U5 g# f
# Z/ J9 q1 k; Y2.emp_ning
4 r# I7 C6 C) m1 ^3 Z1 `create table emp_ning(- f: L5 W o3 k# v( ^) I: `" R
empno number(4),
+ b/ Q2 h. ?0 [8 |" Rename varchar2(20),
0 Q2 q, X# W4 U' w6 N3 W2 Z- G" X* ?job varchar2(15),
; e2 H0 m0 |, _7 w* M9 c Csalary number(7,2),
' q- j; H6 D" ~! k' \4 a* A$ a6 D: g' ?bonus number(7,2), I! D0 V7 E; U6 s4 N7 M0 [
hiredate date,8 H& J+ X" ]5 d4 s/ Q6 H* F
mgr number(4),7 ]$ n% M. D" R) l2 i4 S8 U
deptno number(10)
9 |6 K2 b6 N$ y* y1 v! U);( b5 o" O9 c+ b& M7 I1 l* B
9 ?! H" ?6 i6 Y! W+ s1 p# M
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
# e! v7 v6 v1 E* w! S8 _insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);0 V: I* M1 Y! [" O; `
insert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);
" o& k, p9 A7 g# a ?insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
+ }/ m1 N! L. p* j: jinsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
0 f2 Y4 i) m* Uinsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
) c# U- D4 w: q# ?insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);! p* C: ]' g+ ? r4 l8 H
insert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
+ X( c+ I$ B+ M: a, U8 f$ Winsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
; i# I. s! B6 l1 _, zinsert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
$ x5 V4 s B U9 Q$ T/ k3 ]4 |$ Z3 q3 _+ ~
set linesize 150 W7 l" R8 h0 F% ?8 G
col empno for 99996 l8 R) z) s: p7 c
col mgr for 9999& f- k4 R E1 l" P0 f& g, Q* Z
col deptno for 998 h: ^% L& M5 d+ a6 \. y
col salary for 99999.99! r3 _0 i) n6 ~1 e1 ]$ l4 N0 p; F
1 C2 N+ B$ ]; J
select * from dept_ning;
3 S0 F& q/ Y- O1 ~! p) U Y4 [' Jselect * from emp_ning;: { f* a0 M' d- b
% d. V d; T3 c5 o8 H7 I) R" j一、学习查询语句。. }* b* y2 K& a: x
1. 计算员工的名字、月薪和年薪?( _0 V3 v; K$ K
select ename, salary,
: u6 o ]* |9 g$ N/ msalary * 12 year_sal" p* N9 t E) e
from emp_ning;9 i( b( h1 {; s$ J: P0 R+ q y
# r6 `0 G- a# V$ k
2.计算员工的月收入?
. p3 t9 Y& ?" v2 X空值和任何数据做算数运算,结果为空(null), M- R; N% f# D
select ename, salary, bonus,
, o; \. _0 O2 F4 t4 K salary + bonus month_sal
, Z& O I P- vfrom emp_ning;. ~5 f3 X% p; |/ W
4 |4 ^4 H" y6 d. R' F: u, k4 G
select ename, salary, bonus,2 u, D7 d3 E$ E) v1 A0 l! v
salary + nvl(bonus, 0) month_sal% S& K1 C4 {% v- V" D& O) K
from emp_ning;
" A- I# f. k7 Y. q8 y" p
; s( @2 f1 I: [" u+ f- B+ `public double nvl(double d1, double d2){
- F. ~ X1 L+ F3 h' H4 A8 U' {4 Q3 ] if (d1 != null)
" q. l$ o8 V4 y }7 s3 U+ A return d1;9 z, G! ]! I: W& j
else ' V: D4 F- o& C: s( G+ v% h
return d2; 7 C& n: \. B% c( T7 {' N9 g
}, d$ p/ m4 j& \+ M# _+ g
public String nvl(String s1,String s2); n/ S6 J0 f7 d y$ C7 Y( f7 g& |/ n
{
3 I) H& f) b( }1 @( M, X if (s1 != null)
: z5 A- v# c e5 {" I w return s1;/ v, R+ @1 I% i3 x3 Y8 }
else
$ l8 x' h5 u% g- h. o# C R; U return s2;: S: g+ z# F- b
}
1 }# c* G1 k6 R1 @& Lpublic Date nvl(Date d1, Date d2){
9 w+ Q. {3 O( C2 R return (d1 != null) ? d1 : d2;8 `* r7 d& P5 q$ V' o/ y0 t+ h" l
} Z% s2 C9 g& \$ s
{7 I: s. E5 U" }+ Winsert into emp_ning
5 {: F* K2 [- W* C( Z" E- N5 W7 Lvalues(1011,'余泽成',null, null, null,
1 i" E: c2 p; y- ^/ K- E dnull, null, null);
5 j* G: x$ W Y( E9 T- `7 p简写为:! U' {* l @0 e$ N
insert into emp_ning(empno, ename)8 P" A( @, I* q2 s
values(1011,'余泽成');7 C# Y2 _0 D# Y6 u+ Z
# w5 l+ U7 {$ @- B$ e3 |% j
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。- P0 g: U0 ^' C; ]6 t# i
select ename, nvl(job,'no position')+ q( T" N Y2 R* p5 G8 w/ k
from emp_ning;
# M& i0 r: [ e( H' | a. M- M/ Q/ ~" a! q; z& f7 ~
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。8 {- t9 y0 s5 B4 e* E; K+ ~
select ename, nvl(hiredate, '10-OCT-11') from emp_ning;6 P# Q" ^, I1 H# Y. ]
4 b+ J; R4 G/ | z/ knvl(bonus, 0)
2 w2 _; v7 A$ h) L9 xnvl(job, 'no position')! b) y g$ x( r1 j
nvl(hiredate, '10-OCT-11')
0 Z0 h: [$ O8 T; Q8 k1 H# b. W3 V* e* T" @1 v2 L2 i" W
--复制表emp_YYY为emp_XXX
* j4 c( O6 d9 K# _$ Pcreate table emp_XXX
/ Y/ V' Z# z9 R! y' O. O% Eas
8 X7 e7 C1 l3 b4 T2 Z7 Uselect * from emp_YYY;
5 a* c' U9 e# _. w
x3 H5 B% Q. K, W3. 机构中有多少种职位?
9 R5 a* z- q+ S' r9 k& p' tselect distinct job from emp_ning;
% n) g; H* ]- O- [% j( Y0 B3 ~4 d) r1 H6 z7 f2 x$ I
员工分布在哪些部门?% `& L; Z+ y. F1 S2 t- B
select distinct deptno from emp_ning;6 S& I2 p/ d/ {. @, i3 R' l
: p' U; _; i1 _7 b) B% c; s. cdistinct必须/只能跟在select后边。
( u- n; A; l' I- z) M
8 s0 b9 s; ?% I7 R5 E1 c4.薪水高于10000元的员工数据?
% E! {1 ^" @" Y5 | m7 Xselect * from emp_ning; U# I) A. A" t: `$ F5 V" ~) W
where salary > 10000;
' M% N& g- P# |$ H# z/ ~. `& O( j" Z! Y" y& ~2 O, e
5.职位是Analyst的员工数据?& o0 K& n0 F/ F$ M% y2 d
select * from emp_ning
- ]6 S" I b1 ^where job = 'Analyst';
( l4 w8 |/ J1 Z a* E' m7 q8 W. S) g/ `3 r3 o
analyst ANALYST anaLyst% d' o0 x. ?$ D/ i4 I/ W4 T
. C, ^( q7 R5 S, z4 r' D
select * from emp_ning
6 t$ K* j) O; t6 l3 v7 a8 B9 Z- vwhere lower(job) = 'analyst';
4 C+ D3 q O' |% m
8 n1 N9 ]& Q- B/ F5 F. n1 {; nselect * from emp_ning
3 b- t g2 M% l7 Y9 a, ]# o4 Vwhere upper(job) = 'ANALYST';
8 j, S' v1 D- Z; \/ W# E: {8 B
4 E: ?; p. b5 ~ B" w--如果数据是analyst,查不出结果
1 s" a$ }6 X9 p! f/ _1 b--SQL语句大小写不敏感,数据大小写敏感
{: O* u" k. r) i& n0 G3 z
v2 Q2 S+ G' D7 U! T/ u$ _* E6.薪水大于5000并且小于10000的员工数据. \0 O/ {& j& W/ D$ q1 |
?6 c6 \! A* a3 b1 i* i( l5 T* @
select * from emp_ning
$ [; J0 i. C9 c* q4 ewhere salary >= 5000
. B& k5 ^ n3 Q& i" r% vand salary <= 10000;
5 [8 K4 _/ Q" N- A. W, v5 w" I; O: }) F! _6 A h3 q
--在区间中:between 低值 and 高值6 h& [; H$ n6 r. g, \ h# }
--闭区间:[低值,高值]0 {. x- e1 h1 {. Q
select * from emp_ning
2 W) w2 |. c# o$ Owhere salary between 5000 and 10000;6 i+ ?* J2 _' }
$ [ b: M7 f" D |0 I
入职时间在2011年的员工?4 Y2 R5 m# Q9 m( q. I, B& M$ }
['01-JAN-11','31-DEC-11'] K3 d4 \7 S% S! U" @! L6 e" k
select * from emp_ning2 {/ `" o" w$ [8 k' }: o, T/ p- ]
where hiredate between '01-JAN-11' [3 M, T: @2 N1 s. x
and '31-DEC-11';* L: o% _5 X; v2 f/ H1 C! C
& J- E" k. E9 U- [
7.列出职位是Manager或者Analyst的员工
: E! g! w" n- g) i5 \?4 Y( Y# |0 G S+ s8 _9 F) c
select * from emp_ning
- N, i$ L" n, ^3 twhere job = 'Manager'1 c4 r" ^6 F) n! \1 z
or job = 'Analyst';, L) M8 @9 m+ q1 h
--等价:in (list),在列表中。- Q3 D; g$ g) f$ a
select * from emp_ning6 k" V+ O8 o9 y% E! A! \$ l
where job in ('Manager','Analyst');
1 j# r; \) \4 V
( @, [% z# s, Z4 h' u- ^8.列出职位中有sales字符的员工数据?
/ G) _+ s0 [2 v. Esalesman+ N8 P/ B d- `+ @" A; i* W
sales3 N$ ~" Q; k9 Y3 k. T
before sales
u0 N' H8 C7 V' A, S: qafter sales( H6 S3 k- r7 f0 E( D& i
before sales engineer
5 d3 o9 \" e& B( y. q9 Y6 v3 q# P" p- ] M; L. n
--%: 0到多个字符,跟like配合,模糊匹配3 e. y7 M7 j9 P- }) N5 K
select * from emp_ning0 c! N: {; {6 t6 u" H: {* O& b0 o+ v
where job like '%sales%';
3 Y+ L/ H8 L' r2 _- |' \' b% W: Q( m' R0 d( l$ e( B7 e) s
9.查询哪些员工没有奖金?. d( D/ O2 b+ C, a
select * from emp_ning
! b5 x# Y1 w& X1 R' [where bonus is null;$ {) n( K1 M+ D- h1 l6 C3 `
( ]& `- F0 g7 {* P5 E; F
哪些员工有奖金?
# m7 W. z' F: D7 jselect * from emp_ning7 S, g; ?% h4 ^8 \% N! u7 c
where bonus is not null;& v# x' J# F N" l
2 }! v5 g9 O+ ^小结:
! B3 Q1 A3 H6 l; B8 x1 ?1)create table ...4 W1 C, M( T8 J4 O8 [: T
drop table 表名;
5 f4 q4 C$ ^, u! h* q2)insert into 表名 values(...);" S3 O- Y- X7 X- \
3)select distinct | * | 列名 | 算数表达式 | 别名
( }- `# |% M# y" C u9 Q from 表名
$ o; q/ m5 a* d! b" l where 条件1 or 条件2 and 条件3;
& F% m0 T B' _* G' l1 s: E: E" s6 u
> >= < <= between...and... in like
9 _1 `0 R, o3 s" ^* V
8 ~& a" E$ T6 t( [/ L, `% a |
|