该用户从未签到
|
数据库: DataBase,DB
( k9 R9 V9 ?3 L. Z5 e存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
7 a% f% |5 O/ zoracle是一种数据库软件。0 @% ]! p% O7 u8 B
, s% s ]: J0 m
Oracle db2(IBM) sybase(sybase)! C- e2 E: b4 Q- l7 u5 L/ A6 Q
sql server(MS) mysql(Oracle)" o! V+ _ Z" U$ w
access9 I& M3 W- U$ y
0 b3 e6 C& q& g2 U8 p% A2 o数据库管理系统(Database Management System): DBMS
2 I, h1 U: x8 J8 q9 ^* l. C+ `* d; V$ ^& R, u" g; H. L
SQL:Structured Query Language
: k% b/ w+ E4 {0 D. T结构化查询语言:和数据库沟通的语言。
- o' S/ I% f- ?2 [" Q
1 Y; }( `% ]( W6 `; ?DBA:Database Administrator 数据库管理员; @, B* j: @4 q3 h e
. N& V7 G8 l' U, b$ c' UTable:表:数据库的基本存储单元
7 F7 P: l8 M' `" U) a7 `5 Q横向:行,row,record- Q% N& X+ O2 Z% J8 I+ ~
纵向:列,column,field
. V$ i9 ~. q2 j/ Y9 n4 A2 b7 C
5 A( X, _0 _9 Y9 W* ~任务:把用户数据存入数据库的表中。
+ _0 N9 g" Y6 M. L9 R: e实现:! |6 H2 B6 U2 A; g* \. k
1.建立一个连接( X) }4 b. S6 Y) K$ {( `# z3 F( T
1)数据库所在的服务器的地址:192.168.0.262 F/ [* ^' L5 Y. L/ l8 o* |. o3 z
telnet 192.168.0.266 h# s' S- m1 B5 d# t h& L
服务器的帐号/密码:openlab/open123$ A( g! k9 W0 |+ n+ k" V
2)数据库访问用户:
& j1 X; G( @5 y/ k Qopenlab/open1238 t7 }; @9 c' S( y
数据库默认帐户:scott/tiger
0 [; O8 {) `; D3 E [3)oracle数据库的连接工具:
# Q0 K/ f( [" ?- X- y. JSQLPlus:Oracle数据库的客户端工具$ H- L. [8 j; s+ q8 j$ Q9 ~4 K
位于数据库的服务器上,192.168.0.26- ` S: v- c/ t
$ sqlplus openlab/open123
& Z9 b( S! {$ M, u7 QSQL>
/ w4 K- q1 v+ w8 S如果提示SQL>表示登录成功, n! o0 P' Y9 y0 u6 H! n
, }4 W3 E1 D8 j3 i, z4 p
Q3 w4 M- L% d( D2.把数据表建立起来。
9 k$ X7 G1 O# c定义数据结构:5 _9 J8 U4 r- \) N7 n
create table user_ning1(& i$ t/ Z( b) s! x4 |. u
id number(4),) |1 [( E F8 t& Z: P
password char(4),
( w. K" r* W$ k( {- |name char(20),; z, J$ Y! i& L, A' ^. G
phone char(20),
8 ^. F, E! U+ S( L( V9 K8 f) {; x: _email varchar2(50)* e9 R ]: i; W; `, u! C
);
" a% H; c: h; F2 M8 h& o; _2 P提示Table Created. 表示表已成功创建。/ Q3 \: }. Z% _1 G: z
2 Q, M+ d; U: ~; r5 o% u* d' f6 M
数据类型:
, Q' k; S I) T; \1 r# j2 I4 r1)数字:
8 Z6 h9 N; S3 [number(n),最长n位* H! i+ z( U5 a4 _0 M) e
number(n,m),最长n位,小数点后m位6 {- v8 t" x7 a2 G9 I5 z3 L+ a
number(7,2): 99999.997 r7 K) o* K# I+ O6 l
1 [* Z! N6 `7 ^$ m0 v( `+ M5 g2)字符串:
( t' r1 @& e+ `! I6 g* Pchar: 定长字符串+ _6 o) s2 C/ f w
varchar2:变长字符串# C: Q3 U9 g9 L$ h' X% i
char(10)3 \) _; I% {, Z! u/ i! z
varchar2(10)% V) E w/ ?* x( Y+ d5 g
3)日期
D5 S S1 L6 F6 i( S* Ddate
1 F- o3 W0 R! G) A; t* E+ F4 s* ~! k/ g7 w) @
清屏: clear scr1 a4 N) P3 R5 Q) n
6 s# l1 t6 c. y; n' V$ g3.把用户数据存入数据表中。! ?! D! Z" b1 e. m l3 b1 a: E
SQL>insert into user_ning1
4 s' I J. j# k/ x( d( x values(1001,'1234','liucs','13600000000','liucs@sina.com');% _0 H' _5 [# V- N) D
) e' v2 [6 P1 b0 e0 v0 K
insert into user_ning1 values(1004,'1234','liyi','98765432',
8 {! m+ l* T; P1 f* h- b0 }; j9 o8 R }'liyi@sina.com');
: |3 ~6 S; @/ o# q3 L+ {5 D8 }* ?: V X
错误语句:
3 T _3 y4 |7 kinsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);
1 x P; z ~1 ?: Y$ }# I$ e9 C- M
三种SQL语句:
+ O& `' x8 K4 V) W9 g4 O. h {1)create table..., o% ]% x) `7 ~& }* e& Q- K4 l; _
2) insert into...values...; n2 v- |0 S6 y1 T
3) select ... from...
% |0 _* | Y% z' t- X2 Z% G
$ S* _7 ?0 b! LSQLPlus命令:0 M4 ?+ G+ A( r* s8 L! N- n6 ]
设置每行数据的显示长度:' J$ L- a: Q M& Z3 T8 D
SQL>set linesize 200; }2 m/ }: v& f4 n% N
设置列宽:10个字符
4 o+ r) k# g$ s) }; P, J! tSQL>column 列名 format a10* W: L2 l5 d5 A" Z4 B; h
查看表结构:desc:describe 描述
4 V: Z5 n/ I5 Z0 I& O _SQL>desc user_ning1; d: V. Y- T! |7 i
0 w: p+ m z" `9 h; a
规范数字宽度为4位:$ y3 I. i* o8 p- y* |' ]# }# ~* A
SQL>column id format 9999
+ B# P8 y1 r5 }4 n简写:) r8 k L% R# b6 \
SQL>col id for 99999 _+ r9 Q2 a, P0 A* _$ [; ]
- i9 G7 N. c" {8 C
--*表示查询全部列
* V7 y* n) q* ~) J1 Tselect * from user_ning1;, j/ [4 @$ G: L5 F, ~
1 I& d/ J7 S) M! j
select name,email from user_ning1;) ?, J. g. W2 f0 M2 `% b" C
: c+ ]3 Y1 T& A% }2 W0 u! ?
--查找1001/1234考生的名字?
+ B& U1 K' s- x. |7 j* Hselect name, email from user_ning1
* k' n! x7 }; I' o, nwhere id = 1001
* ]7 A$ p% k; ]8 x7 w+ D* Band password = '1234';
# k \: \' Z" p- P, O4 t! u% B4 @3 h w7 Q6 _9 H6 e
数据准备:0 O1 a6 o8 s1 @, e/ w9 r
1.表dept_ning:) Q- \% }: m0 Y, l, g0 O
create table dept_ning(* @ m+ j- b% {. P# H* J
deptno number(2),
5 f2 m" N+ x! S3 S. [# M% e7 mdname char(20),
$ t9 b v. Z( K# O w# alocation char(20));
H; \& C/ U, j% s# U
! K1 h/ Y6 m1 S- u1 S4 kdrop table dept_ning;4 d- ]2 m. t( b; u6 }( `- @
7 _4 d* @/ M. n5 R/ H1 b增加数据:
& v# P/ t3 O5 Finsert into dept_ning values(10,'developer','beijing');+ y9 {/ Y5 M g+ {( j
insert into dept_ning values(20,'account','shanghai');0 d% ~# j* |6 r% k
insert into dept_ning values(30,'sales','guangzhou');6 q7 T+ {; D# E+ x, B. b3 F
insert into dept_ning values(40,'operations','tianjin');
3 j* O0 X! I0 I# m. E
P- j7 a3 m% \' r; lcommit;
" M/ L; Q" | a* V5 S8 L( `: G" C( d Q+ M
select * from dept_XXX;
3 c1 H: @$ Q; Z, a8 `1 K4 B( [$ ~9 X, B ~! r! v: c2 A
2.emp_ning
- _( B# _0 a V- v+ Jcreate table emp_ning(
K2 N1 D4 C3 y1 z! `9 Bempno number(4),
( A- _! m% `' U. E* k. b3 \ename varchar2(20),. W+ }" D7 W* Q9 R
job varchar2(15),# X# ]7 G& E+ ^/ u
salary number(7,2),
/ Y& C! h+ N2 J' R: i- kbonus number(7,2),
! v$ Y' H! L5 L3 ?& vhiredate date,) _& j0 N0 e. A9 v9 F9 N
mgr number(4),
( E2 C5 Z7 F, U& ?# j3 O9 Cdeptno number(10)
3 e/ k1 J8 \$ J$ t8 s- u);
* k9 Z% x2 |# a1 R! X# ^1 T( `9 }* O1 W$ V* T4 V3 P7 I1 g$ t
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);" h% l+ h4 X$ M- c' ~! w @; K& F$ u
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);
+ q) r2 J# |2 y; Z- A% t0 T8 Linsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);
/ l/ e! X% D' n. [insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
& h( ^7 l% z, n1 u+ Vinsert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
2 o) J/ ^. H* G3 Binsert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
% Z! r) N- h6 F2 Xinsert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
6 W0 M* ~# N, \; \( q& _) x# cinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
' F; ]7 k( Q! k: K5 X: J1 Ninsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);9 w& P& t. T8 X. i; e! K/ X5 x
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);# p+ ]& Q) O4 S
: n4 t* C! u+ ]6 o3 c# z2 y/ }4 ]
set linesize 150) K4 E2 E4 @) y5 U1 i8 @
col empno for 99993 J& q: f! V5 M" H8 I, C4 }
col mgr for 9999
, o1 G3 G M- Vcol deptno for 99
! F! O. {9 |4 X0 `' P0 ^1 q4 Ycol salary for 99999.99( a( S9 R+ j% {
" [% u. h, g: S. }- E
select * from dept_ning;0 o) s; a! n6 X) W+ J% M
select * from emp_ning;
& B% P1 m* r- J0 U+ @) B, h* o. w% t; N9 K; o) m: I
一、学习查询语句。
: h% t( V0 z/ \! }* ?2 M1. 计算员工的名字、月薪和年薪?5 \, g& v* F1 g* a; [
select ename, salary, 4 c1 o+ K! ^+ n4 N
salary * 12 year_sal
. A8 G8 M+ K( S Y1 Y4 l* Z$ ?from emp_ning;5 d% L) c a& c: Q
/ C. W4 d2 V9 g3 s8 V2.计算员工的月收入?
2 [* C. J/ S8 V- T* t3 ]# S5 P4 _空值和任何数据做算数运算,结果为空(null)5 s( U! U X( }4 `1 \5 E
select ename, salary, bonus,
$ r, Q6 U$ `; x- n5 b& Z! |' k salary + bonus month_sal
& [* X5 Z( {5 o7 @: z5 G/ A* ofrom emp_ning;2 N. G# ?6 }9 Q# ` S* x! D3 t/ a) j0 i
; P- F' k& E, B+ b& d
select ename, salary, bonus,
- l/ Z/ `: h2 i- R" } salary + nvl(bonus, 0) month_sal8 G/ x: k7 U1 D1 X+ m
from emp_ning;2 }% h( u, H5 |# ~! r) y
o1 I$ h4 f, _; k9 i( o/ L5 {
public double nvl(double d1, double d2){0 u' k; J& Q( _' y/ [/ Q7 q# S
if (d1 != null)' Q0 i1 W& O, o$ ]. q
return d1;; F9 j) x) X6 H" u- | Q+ Q
else " _$ ]3 a8 H% U/ c! r$ t# n; a
return d2;
' W b ?% _ e0 o- y}, _! d2 s8 y3 v0 n$ d: _" |( P
public String nvl(String s1,String s2)
. |; u% u! E( M4 b% `{
# }( b5 [! q6 R if (s1 != null)
2 q1 U1 n0 F* }! k6 d% ]. H& \- ` return s1;
0 U1 T5 }9 Y _( w5 D @ else; d; m. R$ \/ Q' p, `' H
return s2;& U% J. k- @& J2 A, p8 t5 H
}. y" ]0 |: o7 g' }& T7 q& ?" l
public Date nvl(Date d1, Date d2){
' ]! e" H/ Q: c4 K1 }- t return (d1 != null) ? d1 : d2;+ v9 Y' @$ ^9 Z; {% B& H
}
! t z9 W9 h8 S' {/ T- z- {3 `7 L
2 [5 `: r; ~. A3 Ninsert into emp_ning
A ?& E* W$ k; Qvalues(1011,'余泽成',null, null, null,
( N# s) h# E- h* s% mnull, null, null);
4 R4 D9 m; L, h7 T简写为:% n3 y8 M; c; d( I/ L
insert into emp_ning(empno, ename)! W8 k, {- M! l0 \0 J* X+ \
values(1011,'余泽成');
+ i. T2 H5 T2 t+ k
; w+ t& W; z* V查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。; @8 g3 d+ Q* P1 ~- }3 i
select ename, nvl(job,'no position'); i S8 W( I: ^: C" N6 S4 B
from emp_ning;4 ?/ k4 U+ P4 v5 {* x& O" N0 f, k- B
" W) S& a3 k K7 k8 G0 g# I, w8 M) ~查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
, l" X. ~- v q- k# c/ L$ {select ename, nvl(hiredate, '10-OCT-11') from emp_ning;
4 E7 v E4 Z4 b! R6 G" s% e" A6 o# S# p
0 Q- Y7 f- F4 `% anvl(bonus, 0)) |$ W, g" ]5 Q, y
nvl(job, 'no position')) p& T8 e" w8 @% y8 `8 P
nvl(hiredate, '10-OCT-11')
% j2 ^. ^' D7 f) W( i; \3 A2 U4 {! }* H( ]
--复制表emp_YYY为emp_XXX
^1 G" E# o9 m, R$ H) M$ c* |create table emp_XXX$ _& X( R0 @0 o+ B; Q0 |+ `- w1 q$ j
as* c$ u T B3 Q
select * from emp_YYY;4 F% m% k5 v: j* Q
4 [2 C- u/ |3 l- K5 D5 r
3. 机构中有多少种职位?
4 R+ r% E5 ~3 n9 h& |) b( g* ]select distinct job from emp_ning;
3 O/ C5 g' b$ E2 N4 t
/ B# e* F5 k" H9 O% i员工分布在哪些部门?* }: M( I9 t- ~
select distinct deptno from emp_ning;$ P2 B2 }2 J! F ~, R! ^* l# J4 R
# X1 d( H7 O# A( K% B% edistinct必须/只能跟在select后边。
) c" E2 K( p1 o F. G1 G2 X6 L( \+ a. Z1 h9 C3 p C
4.薪水高于10000元的员工数据?
3 v6 v& P% a4 a- z- {select * from emp_ning! ?# }6 ]* u* d7 E( P
where salary > 10000;
7 Z D Z& M9 }6 \, j6 s C5 x; g( m3 j! p
5.职位是Analyst的员工数据?( T: d1 I6 I: d" Q' N8 W& N
select * from emp_ning
" ?. a' O& h- ~7 K6 p+ w) iwhere job = 'Analyst';
( [$ T9 N' q4 x( L f
% Z$ q, s J8 @& I9 h& |analyst ANALYST anaLyst
" A: r2 l$ N3 E7 V1 t. D' Q l5 s: [( [2 Q+ l3 w2 T
select * from emp_ning @& L" s* x% H2 h, O k( V2 |
where lower(job) = 'analyst';
8 ?0 w K g) \0 z% J: I) X. [
( _6 u- j. E& Z* K3 O% Z9 lselect * from emp_ning$ O/ t' R0 C% ?8 d; c, C) ]
where upper(job) = 'ANALYST';
0 U% i7 w: C4 x
' ?+ d! m, {$ j--如果数据是analyst,查不出结果' W9 `- X! l$ D( d0 B
--SQL语句大小写不敏感,数据大小写敏感
, f/ X( y8 K2 k7 }* s
+ X; g( t$ [$ u$ P6.薪水大于5000并且小于10000的员工数据
2 }) K- b, F F$ E. u# G?+ [+ {4 W3 b1 _7 s @+ r
select * from emp_ning6 N3 a) r2 p8 S' ?) d0 Y
where salary >= 5000) d4 F2 e3 h4 r Y* Y+ h1 j& Y
and salary <= 10000;
, {! @2 h2 n9 P* g5 p, \, y
+ K) T3 Y$ J4 i' h--在区间中:between 低值 and 高值
1 ~) M) M" S, s. q0 Y--闭区间:[低值,高值]
9 j0 z; b5 Z; S" s# w) Gselect * from emp_ning
) P6 E; c% r( i3 h( g! ^where salary between 5000 and 10000;
5 ?- v9 P( j2 y* {3 q
* H0 |3 F8 a, E r3 G1 ?$ V' }入职时间在2011年的员工?1 Z- L4 V, G8 o5 M
['01-JAN-11','31-DEC-11']' ?- I6 T' H3 ?4 v, \$ b; L
select * from emp_ning1 E9 w Y: ^6 v! j# A C3 o
where hiredate between '01-JAN-11'7 m+ P/ Y4 A5 q6 E, o9 W1 g
and '31-DEC-11';
% U# j3 o1 }/ }$ e- N+ j/ K/ ` b4 d3 }' b0 v6 E* u1 [/ B
7.列出职位是Manager或者Analyst的员工2 [' l1 t; Z' l) e+ B( G" p1 c
?3 p3 Z) j7 s- \- c. u0 m& v2 j% N
select * from emp_ning1 |* e2 r3 d, a
where job = 'Manager'
& S# k8 G; U1 z$ Z5 J9 oor job = 'Analyst';
! ~, e2 C; ]! j--等价:in (list),在列表中。
$ G9 x5 t# |) \1 W xselect * from emp_ning) D' L& _3 I! l: N0 Z9 K. v
where job in ('Manager','Analyst');, Y' Y$ D% S: b. U5 ?' z2 A& R) O
! |8 W1 R7 @, t w8.列出职位中有sales字符的员工数据?# B$ t5 b5 Y2 c4 E
salesman
+ s! f- L# A* G( ^% n: }" Ksales
5 I, S( d$ [" X7 q/ a0 Obefore sales" h8 T6 d" w0 r- Z5 K. M+ S
after sales& w, K+ D2 D5 D& Q+ I* o
before sales engineer
: q& N I7 f) n& p8 y" n, m& Q7 \3 p7 `7 @
--%: 0到多个字符,跟like配合,模糊匹配4 O# a' p) k3 \4 I. b
select * from emp_ning0 K! n: V& c6 f L* Q
where job like '%sales%';
/ c# G- k) A7 _1 i) m
4 j# R6 o u* P' V$ k9.查询哪些员工没有奖金?
& N8 p( ~' ?1 `# P" C \; |8 jselect * from emp_ning0 B5 f7 J0 f" F6 K8 B
where bonus is null;
- R# G- O* q9 H6 Y3 O2 N
/ V) Z9 d5 @/ v/ _+ R哪些员工有奖金?
. a( J' i: j1 S) ^+ |) O1 fselect * from emp_ning
: K1 g5 c5 \4 W' x- y: nwhere bonus is not null;3 ~( {' B( j6 z4 k$ j
2 p1 g$ h/ j: S% X( d9 x
小结:
5 d7 U/ ^; f$ v8 V. Q+ }8 P1)create table ...
* N% m# k1 Z1 L drop table 表名;
" O9 Z% r9 H9 n U2)insert into 表名 values(...);
% K7 f4 M' m8 z" N3 z) }3)select distinct | * | 列名 | 算数表达式 | 别名
7 m* o/ p3 {. h( h, r, D from 表名
" {! C' K5 e4 a4 C where 条件1 or 条件2 and 条件3;
1 e8 E7 K) D1 m. h" I! ]
$ b8 h5 H, P- }9 i" c6 W> >= < <= between...and... in like+ G% u% q$ m. H6 v
- D+ ]8 ]) {% o% D1 U+ ~7 O |
|