该用户从未签到
|
数据库: DataBase,DB
( v# G) _; @8 m3 C存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
( K a" f, b) O7 ~( e* ?oracle是一种数据库软件。
! J+ i2 c7 Z" \( @- `
. {$ H6 \! G# z$ r, ^- ?Oracle db2(IBM) sybase(sybase)6 w7 C8 n$ c+ c* u
sql server(MS) mysql(Oracle)
5 y8 `' Q' M" U" V% G- G) Faccess
/ ]' s4 K% B$ a6 Z0 ?# U
# p4 V1 }" V- o数据库管理系统(Database Management System): DBMS
: V8 \. v. S3 n7 o# J' P6 [& V" V+ n
SQL:Structured Query Language
. L" A( b7 I9 s4 O结构化查询语言:和数据库沟通的语言。
, n, c9 | N# D3 n4 n( J1 G2 J
; P. r7 n; I9 @/ B* D5 u% \) aDBA:Database Administrator 数据库管理员 W5 _6 ]- O5 R( v. |
: N6 p c+ [3 j& ]1 r
Table:表:数据库的基本存储单元
- @7 ^6 o: l+ e* s横向:行,row,record
4 A' e9 d% F+ {) ?纵向:列,column,field, r+ ?! _" j& Y+ S4 U: _8 a: o
1 i3 ]# q0 V1 T7 F9 O任务:把用户数据存入数据库的表中。
8 c7 s. c7 t( d$ u P, N- {; [实现:0 u& N/ o E, l# M, a Q
1.建立一个连接7 }$ _7 S$ n; `9 @
1)数据库所在的服务器的地址:192.168.0.26
7 |2 u1 N8 \! f! {, Htelnet 192.168.0.26
! V( L( `" w I, s. t( j服务器的帐号/密码:openlab/open1235 j" f2 K" L9 |; t' R6 ]
2)数据库访问用户:' V' D2 `, N0 w) ]
openlab/open123
6 R$ S- W. d- |9 h数据库默认帐户:scott/tiger
) _& Q2 y* w9 d9 T4 X7 P4 W! I3)oracle数据库的连接工具:2 f0 u# ]1 f2 [% M
SQLPlus:Oracle数据库的客户端工具6 T1 s# |# E+ w! V7 @8 W7 K
位于数据库的服务器上,192.168.0.265 ?5 `; Y- U6 p/ D* E
$ sqlplus openlab/open123
% C s, N5 Q) B/ j2 V; Z4 qSQL> 9 u8 r, |9 Y5 o
如果提示SQL>表示登录成功
$ W5 N$ | w8 c! ?* a% N W0 W" ^& d; g0 t8 d( K) _; q
+ ~+ L2 Z% H5 r# T; g0 V) R
2.把数据表建立起来。
0 k1 \# S9 W+ W1 J G6 @) z5 N定义数据结构:# y: f. J3 W* n9 k3 `6 y# U
create table user_ning1(
7 p' \# z' T& t& Eid number(4),
+ v! G- c& q' I/ jpassword char(4),
+ M) B! D0 F$ Oname char(20),
0 m2 q( T8 l8 Z2 A4 aphone char(20),
& _8 v9 k! e! w8 }email varchar2(50)
! S% h2 s' s }7 b, B. Z' z);3 \3 O1 F5 H" Q/ |) t
提示Table Created. 表示表已成功创建。/ \; t4 Q# o8 ^4 L: y' J
* [8 W1 L/ {" r数据类型:$ _( q2 ?/ B* l' B
1)数字: & C2 X2 B, s( T3 q3 s
number(n),最长n位; O; P1 q. ?; I+ y; j; Y; z
number(n,m),最长n位,小数点后m位; z- o4 J3 W9 a) w& {- _) R$ l
number(7,2): 99999.99
0 ^' `+ x3 r' k, S7 g4 V& A0 l7 U1 c5 V! k7 K9 g
2)字符串:) i* y f4 Q' Y1 i) X' ?0 V
char: 定长字符串
2 } P# X! B& t% d; lvarchar2:变长字符串% G6 y, u$ e$ r9 y7 _7 [: y& x) r
char(10)3 a1 W- T# @' O9 u% d( w8 j/ t
varchar2(10)
: A% ~5 u: w0 E5 f. A6 t) A& g3)日期. V( j0 y A' s/ _: L
date
2 P: q2 G- _9 G% g' y' w( h3 F2 z* R5 Z! C1 o6 G9 B
清屏: clear scr
5 b' |, v: J; k+ c0 s* z4 n) ]
5 b; u4 d( G$ [9 m3.把用户数据存入数据表中。1 x3 G# K$ R2 K0 E: p. o) B
SQL>insert into user_ning1+ h# d; X' i o, R7 c+ y4 p
values(1001,'1234','liucs','13600000000','liucs@sina.com');6 \* e! x; P9 t
% e7 m7 G0 {6 ]0 f! Uinsert into user_ning1 values(1004,'1234','liyi','98765432',
; b3 W9 x% M; {, ?- ~. a'liyi@sina.com');
! ?9 ~8 D/ Q9 F: L! u9 y& V* C* s1 _" q' L, L+ x1 ~% C
错误语句:2 }: K7 I {! q1 T
insert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
0 @3 X* T. b4 x0 _6 H4 t- Y r6 Y$ _0 g
三种SQL语句:- ^6 a# X7 }+ P5 a0 V- J, [
1)create table..., d! d: T. E8 D1 T+ k
2) insert into...values...4 T" E, I, w" K3 D8 i J" c
3) select ... from...$ f8 G' |6 a' e k2 D4 w
3 E: K" r) R% [/ N' D. |
SQLPlus命令:0 D+ ?: T+ J0 f
设置每行数据的显示长度:
1 z( Q0 v/ I6 e Z$ E/ C' qSQL>set linesize 200
1 A. o$ k* ]* j9 Z+ `! I设置列宽:10个字符
( m5 f$ z' Z1 _3 dSQL>column 列名 format a10
' B% N) X D! T: G; W查看表结构:desc:describe 描述
( m" \3 \% ]! _SQL>desc user_ning1
) c7 L- v& m" K0 k
- }; b1 l* [/ i4 Z+ ~( o规范数字宽度为4位:/ I: }+ b8 g8 j1 M
SQL>column id format 9999
, `5 s/ r7 u0 h) @简写:% }; W+ |* \. b# W8 K' h) j* F2 ~
SQL>col id for 9999& z" l# l5 L" u- d( ~$ E5 A* n
/ B; z) z" P* I u- X1 \8 K
--*表示查询全部列; M8 S+ G$ @5 l& c+ P
select * from user_ning1;" i8 V* F/ N+ w% L3 C: X( f
9 A x, {7 `, Z( [3 mselect name,email from user_ning1;4 ]1 T# P( W1 R8 M9 Z: A" G
: z$ }$ j' Q5 p* ?; S& X8 u3 Z--查找1001/1234考生的名字?
8 h; c* e: ^0 l7 H) ?9 nselect name, email from user_ning1
8 R7 d5 \: {8 S- N6 w% pwhere id = 1001
& F% M: D9 c0 _* K& K7 ]4 K7 O* Iand password = '1234';6 ~: d8 G( `! H% D, y# i# @
* y8 e1 _# w9 Z3 @4 l* K# F/ m
数据准备:
' n7 I0 v$ i5 D# B1.表dept_ning:
; S; B$ T7 i A. f$ Zcreate table dept_ning(6 K- w: }( i! [9 r( L8 w1 X
deptno number(2),: {2 }, d! Z( W+ J; Y& |! O. A
dname char(20),. [/ }* Z7 x, `; G6 W _7 ^
location char(20));
2 j, o9 H- k6 ?( g4 V2 n& L$ Q" U% w( Z: ^0 m) f
drop table dept_ning;
' H+ z. }8 f& ?1 i
2 S1 }1 D- a# _" L9 r' M4 i增加数据:
* Y( ], Z+ }3 [insert into dept_ning values(10,'developer','beijing');7 o. J2 B [! {% R1 A; {& P4 f
insert into dept_ning values(20,'account','shanghai');3 x. I. V* J, M8 \: A: Q5 z
insert into dept_ning values(30,'sales','guangzhou');% G9 R& D0 w2 b: q7 @1 w
insert into dept_ning values(40,'operations','tianjin');+ {0 I$ V) ]' }' g% A
, }+ s, ?5 Y# gcommit;
. h- i& G2 z9 D8 m. y5 ~4 Q7 n* q* M- W* [7 c
select * from dept_XXX;1 t6 U1 H) ^2 d2 U8 l! \! R
% C- {, ~1 E# z: \$ N4 ]% ^2.emp_ning
& L* o5 }% [: Y4 S" d8 z& u: d& k" icreate table emp_ning(
7 |* x$ Y( k" p! Y; Eempno number(4),4 P& m7 p2 P) @, k3 x
ename varchar2(20),& ~0 d1 z6 p5 N+ ?( f8 W
job varchar2(15),
: ~' p! g- a7 i" ysalary number(7,2),
% z* |' a& b. b' t+ B" a1 P. [$ a* nbonus number(7,2),
7 W6 g$ l: ?0 V4 [/ Dhiredate date,
" p6 u5 F5 ?3 N! hmgr number(4),
1 x! U$ }- I* C5 `: _deptno number(10)
- r5 k9 R# F& z% {8 ~$ g);* r0 ^) m- v5 q
1 [: v, D2 Y; A7 q8 p# ^
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);" ], ?0 n# ~1 c
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);
# Z" ^6 ~( z& _- Y4 P/ B5 a3 ?7 [7 Tinsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);4 n H$ w2 J- f" T+ m6 L" h# K
insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
: F& }' @8 {% w/ ^: B- A+ w9 kinsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);6 w" k8 H5 R$ [1 J2 Y2 m: m+ X4 M# l
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
' E1 _+ |* F5 I6 Winsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);8 }) }5 V2 G# ]1 Y) \, y& L
insert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
5 h$ k2 O0 ]% g* C* ?. vinsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);8 g) x9 ^; d# b9 S) Z# O
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
1 ?/ v* M* P* A# e* t4 S. ^* c$ t9 V/ Y/ j& t
set linesize 150* n; V3 M; \9 `+ O5 |% K
col empno for 9999
% W' s+ i7 v& Q5 ncol mgr for 99994 ]: ~* P7 O' d5 a I& h
col deptno for 99. a+ Q% I8 D6 D. X5 s- p; G6 k
col salary for 99999.99
5 m/ B% v' o- J
& i8 b/ q& n1 w3 {) U8 K4 G5 w' eselect * from dept_ning;
% O, C: q5 Q3 m$ V- w) L( H4 v, Z* Wselect * from emp_ning;
3 x4 C J. Y" _4 v, f
- }8 G! S S3 Q' |1 [- t0 M一、学习查询语句。$ b7 N, W* a+ o* E" y8 j! g
1. 计算员工的名字、月薪和年薪?7 Q; ^4 G) a1 |2 C$ [$ C8 I, f
select ename, salary, % G9 y2 x: v S2 P& V$ I
salary * 12 year_sal
: d7 i' ^* o; B/ N+ X! Z8 [9 Zfrom emp_ning;5 Z* N/ i+ B% u" P/ Y
! }; S( ?) F* P8 [5 F2.计算员工的月收入?! B M* X( u: q& R* M
空值和任何数据做算数运算,结果为空(null)
# X% a+ ] q4 O: fselect ename, salary, bonus,, H' N4 I" s3 J, q7 |" V
salary + bonus month_sal. O9 b6 \2 a, }& d: |
from emp_ning;
& \1 m9 k: f+ s; |1 u2 z+ j4 K; M+ T, O( A" a$ }
select ename, salary, bonus,
8 z2 z" n( ~7 t4 G; d' Z9 C& ] salary + nvl(bonus, 0) month_sal; }) q# q s( L
from emp_ning;3 ?# @2 k0 Y* ~ c/ k
. I7 @0 y, F, L8 q7 t* P: zpublic double nvl(double d1, double d2){; ~' `+ \& e! l$ B- B
if (d1 != null)
1 K/ Q! V3 o$ \% L, O: D return d1;
' L3 h0 Q" ]' c1 {3 M3 m- ?9 n$ i( i else
/ A+ n! @! H' Y' z) ^" B7 v1 W return d2; + B' H- {. T. A; y% V
}& I; x' Z0 n- P
public String nvl(String s1,String s2); s% O4 N3 \( R
{! R' J/ K" d# K1 D+ ~
if (s1 != null)8 F1 ]+ b# x- D6 z6 M8 p* v/ ?1 D" {- O
return s1;, Q& C7 S8 f, A8 l3 @* S
else
( w+ `$ L2 m6 b5 s# [/ {$ Z. E return s2;7 S: g4 H4 w' O; ?5 Y& U0 b
}# v$ F8 K3 a: v4 R+ J6 t
public Date nvl(Date d1, Date d2){
2 k$ h# z( H, J! v5 D return (d1 != null) ? d1 : d2;3 w( f, M [: f! r
}
h8 Z) L) M* q" r! n2 p' Z- h4 [- ? f# w: H5 j/ V3 u1 K# r
insert into emp_ning! g. p$ F6 q: r- d
values(1011,'余泽成',null, null, null,! p/ A% v; x8 \/ g# f3 y
null, null, null);3 n7 n" E0 S! Y; c- r
简写为:7 d# H) r) Y0 o; K
insert into emp_ning(empno, ename)
; M9 W) _6 F' f7 `2 W! \values(1011,'余泽成');, ]( m* Z0 O$ {% _; X- i
2 }0 k' p) s) M: Q7 y查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
- b5 b1 z: m$ r5 L7 I1 vselect ename, nvl(job,'no position')
# o, Z' o+ k% N2 }+ a8 zfrom emp_ning;
! Z) k' I* Q8 ]% b
, ]. Z& L6 \4 e4 n查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。7 n$ a" L2 K8 z3 G; x$ @9 {
select ename, nvl(hiredate, '10-OCT-11') from emp_ning;" W2 _3 ]$ ?- x$ b
) u, K4 R5 a1 [6 l! m- k3 r) y" \nvl(bonus, 0)6 f2 |* R& U! q" ]* Q/ L- P' F2 X; C
nvl(job, 'no position')
2 i9 j2 @4 _0 mnvl(hiredate, '10-OCT-11')
+ X: W7 O) Y# Z8 v8 d7 X, s6 K2 j2 A4 {( I; s, e; V2 E
--复制表emp_YYY为emp_XXX
/ k% ^8 A) _# P9 o# Screate table emp_XXX
1 ^" s. B- T4 ~. g7 d! Xas
6 B# E/ w$ {& n7 p" Lselect * from emp_YYY;
; [2 h. [1 s, s4 D8 V/ _. g% ^8 h- v. n# k9 i" E
3. 机构中有多少种职位?
$ j' x' S* D7 A# ~select distinct job from emp_ning;1 `2 X$ Q4 U$ j
7 c! v8 F5 W S) n- C, O
员工分布在哪些部门?9 C5 |" q1 Q- b; M5 T p% b& Z
select distinct deptno from emp_ning;
* w [0 c8 o4 v- x8 Z6 L+ F' [* b. R. L
distinct必须/只能跟在select后边。) _: ^ V# ^; e, D1 p
6 @1 B; q$ K3 T2 g* S- `
4.薪水高于10000元的员工数据?1 e" z" w8 Q& I: s8 p2 H
select * from emp_ning2 @; q" G" b1 J* X0 F
where salary > 10000;
% j0 F3 b. O/ |- M0 j) ]1 E! k. e: A+ b7 G
5.职位是Analyst的员工数据?3 Z+ h0 R/ ]2 U
select * from emp_ning
+ k: v% F j. V0 cwhere job = 'Analyst';
2 q& d3 N2 w0 `: ~
0 O3 w" l: D" j; }- X3 }" ~9 ianalyst ANALYST anaLyst& o9 j( M+ @4 ]! |/ ^
, ~ Y4 c$ a: a, }5 A1 [
select * from emp_ning" e$ e8 _2 `% r/ J7 n2 R
where lower(job) = 'analyst';
3 C+ Y2 N: m8 B0 k( o; e
5 N! V! Q3 B) I; @' N+ C# ~select * from emp_ning
- O, F6 C& D3 D+ Y, Ewhere upper(job) = 'ANALYST';+ |5 Z- \. v s1 c/ k
; F1 @/ ]& a u" P. k
--如果数据是analyst,查不出结果. B) C" s8 J T# O
--SQL语句大小写不敏感,数据大小写敏感
/ d6 t' i; W4 q) G& c x& p7 V" y+ ?$ h d3 [1 C
6.薪水大于5000并且小于10000的员工数据. J0 T# e- j- ]% y
?* b1 H9 K( F6 o6 U- Q8 Z. j* O4 P7 ~
select * from emp_ning. Y c* Q6 C+ M, ?. p3 ~% `7 |, f
where salary >= 5000
. {0 d% E3 `& z) u/ F0 k8 e0 Rand salary <= 10000;
: Q! s1 F, T, F- \
1 E n/ y1 P- W4 v* s--在区间中:between 低值 and 高值+ `# t( n& C. P# G+ B) H
--闭区间:[低值,高值]
& G5 s6 z4 m' i! A( z2 y1 H3 jselect * from emp_ning
3 ], B4 c, Y8 w+ v" |1 j4 P: swhere salary between 5000 and 10000;& l) n: @' l( H. g: f( e S' B
: C6 n# X/ P$ w% k9 H( Y- V
入职时间在2011年的员工?
2 ^7 u1 ^7 L' o1 q& G$ ^8 }['01-JAN-11','31-DEC-11']
( g1 b" h& l) y1 b! R# O* ^5 Uselect * from emp_ning6 l! J9 V/ J4 ^* X; o
where hiredate between '01-JAN-11'( E9 b; I w. z- o9 j8 J5 e$ U% k
and '31-DEC-11';: f( |, W R5 }% C5 y
2 g' q( e5 J. T0 _4 p% G* G7.列出职位是Manager或者Analyst的员工
Q" R7 Y9 I, f" E3 G- F/ ~- U, \?
* Y7 F! ~& C9 U& O" e: ~; vselect * from emp_ning
4 Q# D* C6 d8 Kwhere job = 'Manager'; e0 G$ J4 o' a3 z+ y
or job = 'Analyst';/ e5 c' d: l5 p( j
--等价:in (list),在列表中。
7 d5 u t. v9 j+ O I( |' V9 ?0 E, uselect * from emp_ning
& `% d" h) \& S. c0 b* |" }where job in ('Manager','Analyst');
/ s$ `& O2 h) E" S" v& x3 I% [0 z2 [6 W% j% K$ ]
8.列出职位中有sales字符的员工数据?
/ ^) X" M, h7 s% Z/ P& m! A3 bsalesman
" i' ~1 G! u7 xsales
( F: D+ H6 W, y i% gbefore sales
8 J N+ \& u; c9 t9 aafter sales
' B/ a+ F/ q/ _% ibefore sales engineer @: t- Z8 O4 ?
# {$ Y( D6 _; `/ j5 J' l/ Q! g, X
--%: 0到多个字符,跟like配合,模糊匹配5 E, \3 Y: g+ a1 ^ Y2 I9 U
select * from emp_ning3 {5 W7 N4 n% b9 v
where job like '%sales%';+ e- A# L1 Z9 g# Z) T. E
; V' |' Y3 H) A5 V4 U" y' V: \& i9.查询哪些员工没有奖金?
% b, B; u# T* E! M5 t B9 J) Mselect * from emp_ning$ C- e* F, b3 `4 d' M3 f
where bonus is null;
+ a3 n: y7 K* z, ~" Z* z/ Z; k& n% k6 k, t( u1 O0 Q+ O' Z
哪些员工有奖金?
4 M( \, Q7 J5 s! Iselect * from emp_ning
% u3 h: r& A8 `; H5 Z' L6 S( k6 d6 \where bonus is not null;
) U; H1 C3 ?6 D5 F1 F9 d, k+ ^( g( A
$ ^6 w3 |7 i) l/ j小结:
9 O+ V& F+ k8 {: c1)create table ...4 G! ~, x1 `; ]5 I) a! c: x/ e/ z% j
drop table 表名;
6 Q& t3 k( R- q( C2)insert into 表名 values(...);
1 Z1 I* K& r, |3)select distinct | * | 列名 | 算数表达式 | 别名
1 u" ]8 [+ l' H6 Q9 E3 Y from 表名
& }8 F5 m5 \( S7 T where 条件1 or 条件2 and 条件3;7 L2 F7 U0 u9 q; b
( |* G1 G. X( y+ I2 |
> >= < <= between...and... in like
" A: ^2 y2 F) ^9 }! B$ _
& V' K9 A, G4 \/ J, K& X* s1 A |
|