该用户从未签到
|
数据库: DataBase,DB
1 a1 e; {7 }; [6 m t6 H存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
) f. M$ ^7 M/ A# u5 _. d$ g# eoracle是一种数据库软件。
3 y( o7 B Y- W( t9 Q- {. v, ^/ d X& X5 V2 } V
Oracle db2(IBM) sybase(sybase): t. [: _7 ]6 b" A9 ^0 N
sql server(MS) mysql(Oracle)% Z) i8 C5 }/ A4 d8 d4 r7 O3 H4 B* ^
access- m. a5 R9 c+ B$ }$ ?
: Q6 f) w: I ?9 d数据库管理系统(Database Management System): DBMS
3 T3 _5 w4 g* x
+ k: C+ Y0 ?/ w8 mSQL:Structured Query Language
8 ^# u( f0 Y" ^1 w结构化查询语言:和数据库沟通的语言。- v2 R# g8 w& {
! B4 W& J7 G }3 }7 C. r p# j
DBA:Database Administrator 数据库管理员* q h$ [- Z1 _
5 s3 S" s5 R5 d7 S- h u
Table:表:数据库的基本存储单元( |7 z, B9 C: o2 d o; q4 [0 z* F" \
横向:行,row,record
1 w& t; r1 i* k" H0 k) F+ |, m纵向:列,column,field! O. m+ x1 L+ c
7 [# M1 _% e/ d$ E0 n7 `; M任务:把用户数据存入数据库的表中。
5 e* P7 r& v h# m$ A实现:
, w5 f5 x+ K G* \+ m+ w1.建立一个连接
u: O) x9 V9 u% C l1)数据库所在的服务器的地址:192.168.0.26 ]1 i) t- w# S! n7 ]' v
telnet 192.168.0.26
! a2 G1 H( `4 q服务器的帐号/密码:openlab/open123( U$ |7 K Z* Z4 [: o7 u
2)数据库访问用户:
/ z4 b( F# P( q8 d) Q+ X* N- _* Mopenlab/open123
6 H$ {$ h0 {3 h$ G7 w6 V: P数据库默认帐户:scott/tiger
2 }* V$ [3 y7 a2 l' M3)oracle数据库的连接工具:
% Q: r, y( G5 k% z+ |1 @$ R3 v8 B0 NSQLPlus:Oracle数据库的客户端工具* B& v, c/ U. ^
位于数据库的服务器上,192.168.0.26
+ a$ W3 y6 a, T8 G4 b$ sqlplus openlab/open123+ G; t# @8 F$ `2 p0 N
SQL>
/ I1 r8 N9 S& C: u0 ?" ~' P如果提示SQL>表示登录成功: H! p" @8 g# u4 ~; z
3 J, d" u+ {5 S) c$ z% T& Z7 @
3 A3 o- |" t) ?9 g2 b. \8 I; P2.把数据表建立起来。
1 z/ l1 `0 `+ R# u; c6 |定义数据结构:$ e0 q& S& h, q9 ~+ N( |
create table user_ning1(
- l" |8 i* v- C% ?( ]id number(4),3 P- w" |" w A3 E2 B- m0 E
password char(4),$ \" y, y2 N7 F9 j9 o# ?
name char(20),
, W9 a1 a/ P% H0 u( iphone char(20),
. ], c# u' B( b3 _' hemail varchar2(50)
# N) n; \# N% y/ y8 T# i* N);
6 `% T! y5 [! g. F7 \提示Table Created. 表示表已成功创建。
4 ^. t# C+ C+ }
4 R7 L `) M7 N8 u/ R8 ]& u数据类型:
3 E1 ~- S0 v3 F4 {( g5 G1)数字: " x1 u3 [3 y& a2 i! J! @# u
number(n),最长n位, E5 w- H5 w0 z4 @4 ?; L8 X
number(n,m),最长n位,小数点后m位
+ ~2 c2 g+ I1 j9 Xnumber(7,2): 99999.992 W7 w- e# L+ f' l# M
g F1 E! ^! M# K+ b2)字符串:
$ { N% i! H* k& ]6 \char: 定长字符串
. T# [8 z, p0 |3 k4 }varchar2:变长字符串: Y3 _0 x( E2 U" G& t
char(10)2 G2 {- n: O3 d) l; c
varchar2(10): O( w( K7 A9 i! F! k
3)日期8 h& J% R! A4 S, S
date: _7 [. u7 S3 [/ ?" {; B% j2 l
$ d* S: \2 W6 D) H: K- _7 c清屏: clear scr
. Q/ J$ a0 P, U* f1 Z O+ S
4 N0 N7 ?) [3 [! g' M. ^( f3.把用户数据存入数据表中。
- `" e- W* p: G& y/ v% HSQL>insert into user_ning1( z$ g8 f; Q4 Z( ]- O+ Q2 T7 ?
values(1001,'1234','liucs','13600000000','liucs@sina.com');' `, Y% _/ N3 B# M! d
7 p2 D( q% t- ?# a) w% c
insert into user_ning1 values(1004,'1234','liyi','98765432',
, f; [# G5 D- T& \'liyi@sina.com');
& P2 S. f: P; F# l1 s8 {0 L3 W, W3 A6 s8 P1 l! {) K" Q# g
错误语句:
7 q( M( Q/ h% @insert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
7 f5 ~9 `1 B: G! f7 n4 r
2 R' N6 s$ s$ C5 \4 C6 R% M* B三种SQL语句:5 S( E3 g7 z- T& ^* c* |9 C
1)create table...% ^, I2 [4 g: L( w" ^
2) insert into...values...4 T% Q# ?9 E0 F4 j/ G
3) select ... from...
. y* x: M6 t- P4 x( l
E9 W7 Q0 v3 ?. R9 e$ sSQLPlus命令:' E1 w1 t0 r3 b4 g
设置每行数据的显示长度:1 z" e1 ~/ T% ]1 z6 ]* g y: |& [
SQL>set linesize 200( B5 e/ a; G3 _1 f
设置列宽:10个字符
& O, i* s( S2 E) ?0 L2 | ]SQL>column 列名 format a10
& I4 ?/ P" m4 |7 t# }查看表结构:desc:describe 描述; ~" i0 e W9 l7 n+ @7 t. A8 b
SQL>desc user_ning1
" I) l7 b: N" s2 m Z4 \$ ~& y* b" {2 i: I; {
规范数字宽度为4位:
: R( C v6 {( }- B6 c' ?7 ASQL>column id format 9999
/ d- Q% s9 ]0 L& g) z3 T5 z简写:
: ^7 t s% k+ L! R2 U m& z* _SQL>col id for 99996 \2 \9 h! E, q7 ^ J! T
6 f6 c/ e5 o2 C; P g--*表示查询全部列" K* a, F: [. l' q
select * from user_ning1;
. A& \5 }5 P7 N
# x3 t( u. K& o ^& Q$ ~select name,email from user_ning1;
! {- l0 k! W1 [; n# \5 ?' y3 I% G \5 ~
--查找1001/1234考生的名字?" a5 D T4 N( H- o- j
select name, email from user_ning1. C9 H3 b. c4 [- b3 }1 O1 s: I
where id = 1001
2 M. G( h6 t. o" l9 Hand password = '1234';
$ g& z" A8 T3 z; ?5 A: b: ]3 H1 ]8 E2 w) C. Q( P1 m
数据准备:; k+ I7 B4 b" b3 F
1.表dept_ning:
! y, K& n' x7 v: Screate table dept_ning(
) {( K/ `2 k% ?) Y% Fdeptno number(2),
% h; r _) U. v$ o' w! t6 F# \dname char(20),
! f' D, m: Z. ~% P+ qlocation char(20));, h, i: S/ d# N+ w, C
; C7 Q, N8 ?- y; o
drop table dept_ning;
& f" V5 B' }) b8 _$ b1 {4 A' T6 \" s# U7 s& f/ Y q* @
增加数据:
2 X6 T; `: E6 D& J% Q6 z1 z n- K7 _insert into dept_ning values(10,'developer','beijing');, x& `$ d, M$ ` B( ^2 \7 B( I4 n3 M
insert into dept_ning values(20,'account','shanghai');$ ^$ Q9 J" j6 Q: d3 I8 y- I" u% t" J
insert into dept_ning values(30,'sales','guangzhou');1 a2 C& o H5 k+ }0 I% h4 d
insert into dept_ning values(40,'operations','tianjin');
# k2 b. T" n+ Z8 Z7 ^! v" f7 {6 u8 ?* Z
commit;; c- ~5 L9 y2 v0 w" x: f4 Y5 b
2 k% K! F- U4 K2 c! ~% g$ _select * from dept_XXX;
; I2 g* D3 `+ o9 }. D
0 i# @! V6 Y8 r; k. N" H" A2.emp_ning
4 x K; B9 D {3 h# s' ?6 Dcreate table emp_ning(
9 W! y1 f0 W6 o3 |0 y& {; M* iempno number(4),
! u) X; N& A0 q6 p% Eename varchar2(20),* _' N1 j4 v) V
job varchar2(15),
. U) y$ B& X Msalary number(7,2),, _5 _7 X; P, w3 F0 k$ H
bonus number(7,2),9 C2 ? B& o! x! ? P( Y' K
hiredate date,* Q' m8 J2 n( {$ z" h4 e$ T4 |
mgr number(4),* h+ y8 v3 l, t6 F; u* _6 w* O4 D
deptno number(10)
9 {# g' s) n O! d# c" r, s);7 L. h; B$ C$ ?* O2 E/ J( Q+ Y) {
. }% n- ]! q- R* _insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);/ O* Z. z5 y$ j0 w5 J6 c6 r3 J
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);, r1 C, Z* q3 e8 G8 ?, M
insert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);' u9 U- y; j% l; |$ h6 R2 o6 T/ I
insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
/ G7 S1 V( x$ n6 l7 H0 tinsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);& ^. J1 n8 ]/ O% t) Y
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);+ u' l! l0 i! d
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
+ I! `- F' f& W' d8 ^2 binsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
. u+ p; ^+ p$ K8 X3 C7 V" L8 d6 T: qinsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);( j. r7 m" z* R0 }+ n
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);9 ]) z2 |5 M6 } |( y. L, z
6 v' B& S) I0 G1 j. d/ H. l. V
set linesize 1505 Z; K6 Q0 e7 Q. p1 }1 I' N9 d' {
col empno for 9999
% ~2 D& [4 i+ Fcol mgr for 99996 c7 c/ F+ M5 _/ d
col deptno for 99" P: W! }4 T; ~: D
col salary for 99999.99) o' r$ l% ~" e. B% Q" s
8 s/ y# l; o) i/ T7 Z
select * from dept_ning;7 R5 b1 }* ]7 ^
select * from emp_ning;
6 r2 Q+ E8 K9 v S8 y; W1 I5 ]/ N, t7 \5 x) E/ }. C
一、学习查询语句。
4 m) X e" `3 W4 Z1. 计算员工的名字、月薪和年薪?
9 m4 O {( b' [8 }$ G, Vselect ename, salary, 6 n: z. v T1 @. ^ T8 d2 E0 O
salary * 12 year_sal
: K# O; T* u2 s v: W! e+ F; gfrom emp_ning;7 w9 J9 d. }9 O6 N6 G5 l
) |7 h' M3 h; H2 O' N% e
2.计算员工的月收入?
: u7 U: w/ {0 g' g/ J! T空值和任何数据做算数运算,结果为空(null)0 f- B/ [$ e# Y& H8 K+ e1 G
select ename, salary, bonus,
8 D/ J- `, J9 |) I1 j1 {5 w salary + bonus month_sal
( S d; p( P8 o/ O+ [ ~3 A; gfrom emp_ning;" x; p0 |4 J; l% t: S% M
$ c/ i+ E) [' ?7 aselect ename, salary, bonus,
; F. r) t a$ b% h: h8 a& r salary + nvl(bonus, 0) month_sal
3 e& |/ V' Q% | Tfrom emp_ning;
5 |% h* b/ y3 D3 O/ d, m! a+ l5 y" d; v' U. b2 ?4 R2 f; K8 P
public double nvl(double d1, double d2){8 b+ a, V: i( ^' ?3 ]1 |
if (d1 != null)
% ~2 g% b& `' o* F( c) C6 H, S$ n; x* a return d1;
+ S# O3 U" d, T else ( p* |0 t, L9 |$ O: X& _7 g
return d2;
4 R( \" P( {; v; g}
/ C) k" X' E: t: `3 ~public String nvl(String s1,String s2)( a4 ?' P% n8 _9 x& [
{$ W: s" V* b p' x3 I) U
if (s1 != null)- Q/ T! i Q/ m* m7 @
return s1;
- @; E' S" N( {' h' S else/ t6 D( ~/ U# b9 F' J. }
return s2;6 w' x* f3 U3 E
}# g* j \+ }2 R: m9 o
public Date nvl(Date d1, Date d2){# V7 h O1 U/ u: M. }
return (d1 != null) ? d1 : d2;
[, n2 t% h4 V; r7 Q}
- w+ P; W+ E# g$ N+ W! t- u" W2 t& i+ u
insert into emp_ning2 U0 n% s8 W6 V% {0 B9 y* a
values(1011,'余泽成',null, null, null,7 a" E! J8 _) I1 h! H) t
null, null, null);
4 w4 Y. U2 {/ y& q简写为:( ]* F/ z" `, `. ]
insert into emp_ning(empno, ename)5 W# S( k4 f6 l# R. T
values(1011,'余泽成');
0 B) C2 ]) v0 y; s$ e- _
, M. o6 S- h4 ~, _' J) d% j7 d! s查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。/ x( K' Y. o/ }( l4 _4 m
select ename, nvl(job,'no position')
% X, l, E. x+ Jfrom emp_ning;
# M* [+ v4 C X6 l- M9 s7 h0 Q$ U& e+ e- Q3 z
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
' T2 I. {5 c+ w d3 I u- `" Rselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;1 w; ^0 s7 x9 K6 M/ u* z
( n: ^2 o3 i( Snvl(bonus, 0)1 q1 S9 \3 {8 n: ?
nvl(job, 'no position')
9 O' ?9 w; x( o! p: bnvl(hiredate, '10-OCT-11')! N) e1 J7 b9 j+ C9 x- [- B
( N$ y( ^+ \ m8 \* V--复制表emp_YYY为emp_XXX @$ {7 k9 _* c" N& }* v4 w
create table emp_XXX
+ ? n4 }) [! H4 ?) O3 X# Has# M! g6 i1 e: b, }0 C
select * from emp_YYY;5 b0 t1 M: ?' ]" ^
: i# b3 T7 h9 o3 ~$ ?5 g |
3. 机构中有多少种职位?
% o: p/ S! W' S) ? {select distinct job from emp_ning;% z% r; ~& L+ E/ d
# W7 M$ a% V- e$ }' w0 q7 ~员工分布在哪些部门?. T! r5 N3 F1 k* ]) I: u, h+ |& U
select distinct deptno from emp_ning;4 J, o) _; [- f; j3 A
8 l* b! a) M( X* s' Pdistinct必须/只能跟在select后边。6 e' Y' @- _ l9 g
# b/ z ^- K$ l: t% X) a
4.薪水高于10000元的员工数据?' a& x6 b. U9 _; S% \) J4 X$ h
select * from emp_ning" e9 \( R! T: k1 `. P
where salary > 10000;
( J% Q9 f6 v: Y2 H% B8 C& z- s7 n5 Q3 Q9 R9 U
5.职位是Analyst的员工数据?
. T _( k* z1 n+ ~+ Q Jselect * from emp_ning' s- Q9 f- R' ~1 s/ V; i# M! g
where job = 'Analyst';" N8 Y @( \9 N! ~
* T4 E6 J# R9 l+ b
analyst ANALYST anaLyst6 w; F# f5 [. M9 X1 f
8 m: X9 o9 {6 g0 q% I) B8 p
select * from emp_ning
, y. [3 c" J6 |where lower(job) = 'analyst';. B2 r+ |1 v0 J6 z2 G4 c* C* O
( Z+ g6 `+ v! W8 i8 s9 S
select * from emp_ning1 ~- E1 X" W7 ?: q# ?: V0 N
where upper(job) = 'ANALYST';3 ?9 e6 c+ L( y( X
8 [4 ^1 c+ |& I# a* X
--如果数据是analyst,查不出结果! d" R( }) b) x$ h
--SQL语句大小写不敏感,数据大小写敏感% w& b {7 a+ k! _* a/ n4 k
& E6 g% d: J, Z$ H: D9 i
6.薪水大于5000并且小于10000的员工数据
: P4 ~/ o) T+ G8 j?
# E3 b& f2 N; i2 d6 q5 M2 lselect * from emp_ning$ W6 x% p) X. U' g# N
where salary >= 5000# o. C- {& M5 b9 K0 ?+ K/ _- o
and salary <= 10000;- Q) | O: f; |# Z5 @. `* {
X K& e4 h6 m8 Z+ f7 Q. F
--在区间中:between 低值 and 高值7 _4 Z8 F, ?* Z' K
--闭区间:[低值,高值]2 }, `: W9 y, m2 X* C: ]
select * from emp_ning+ `' C7 t7 s% k) L i
where salary between 5000 and 10000;
5 V/ O* b2 D$ F2 D |" n( b( ~5 u, S: O% _- a' \$ s8 g
入职时间在2011年的员工?0 W% e2 o8 W; ^4 k4 Y1 H& ~) C" j
['01-JAN-11','31-DEC-11']
* {0 d7 l- D- _2 B8 X* `select * from emp_ning
& G$ X7 f9 Y' E. X3 H$ p: cwhere hiredate between '01-JAN-11'( T& ~, }/ Z0 [1 w+ k
and '31-DEC-11';0 t* \, {; X% D3 G; l
W: p6 B+ e( @7 l, }- o7.列出职位是Manager或者Analyst的员工( P2 f8 L% z N* d
?3 |; r# f4 H0 Q9 N
select * from emp_ning
; e% {) u# _+ x9 ^1 b2 T2 h6 \where job = 'Manager'
) m0 F+ W, W7 O* Zor job = 'Analyst';7 J- f, L( |* g2 T* I
--等价:in (list),在列表中。8 Z% n( T) M2 ]1 [5 }( e
select * from emp_ning2 R6 k/ c& U: j3 C8 ^, _- J: ^
where job in ('Manager','Analyst');( G! L$ X% ]0 ?& h+ B
3 f! Q) `8 M/ e
8.列出职位中有sales字符的员工数据?
' w- q& F2 S. H% Ssalesman
4 q% r% A' q: d6 vsales
9 {. R( L9 B8 hbefore sales
8 ?; _# W9 `# n8 ] | ^) Lafter sales/ w9 `5 k( q. R
before sales engineer
, `6 x/ _: h+ W
1 f, Q9 R: E. x; f--%: 0到多个字符,跟like配合,模糊匹配
# g, s; `/ l, u+ a& u+ kselect * from emp_ning
j3 m# x) h4 N9 z* d0 Xwhere job like '%sales%';7 ^4 t! \! P4 A: F: O
# o" W0 U6 Y) S1 K+ c6 ^9.查询哪些员工没有奖金?
4 o* g' Q8 k4 J/ ^; [+ U5 p6 Sselect * from emp_ning
; D9 Y8 E2 Q' ^where bonus is null;/ [( m' q6 |5 `% g0 L- v8 c2 G
+ i ]) w m: \6 g
哪些员工有奖金?! s" t' ]! b9 h9 ~+ ]& ?$ K& O
select * from emp_ning
5 r& x; X! A& U6 b7 y3 swhere bonus is not null;# f$ p' [/ U1 d! u0 ]0 R; W
& R/ e( Y: x5 h8 U6 |" t4 b! h小结: X$ n7 P) \' w3 Z W! t* _
1)create table ...
4 f& q) E, [* G; T3 W$ W drop table 表名;
* ^" u3 c( i3 K! s; V$ D2)insert into 表名 values(...);' ]" t; J1 Z$ h8 q6 {( A6 s# {
3)select distinct | * | 列名 | 算数表达式 | 别名5 L; P) A8 N" |8 `" T9 I( |0 U
from 表名
( r4 u( Y# \8 V; C* V where 条件1 or 条件2 and 条件3;: O. H P2 N3 P3 b9 g: o
+ j: C$ M4 M, `; {- L; E' b. L0 G2 [* ?> >= < <= between...and... in like1 K! q& c+ r9 L' x' J5 @8 a
1 R% U5 q) n* A' `7 S |
|