|
该用户从未签到
|
数据库: DataBase,DB
, `; X: n$ X, U* y _6 Z$ Y* Z存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
/ W& N) I# I1 n( g yoracle是一种数据库软件。3 I6 C: q) S. q) E( } W9 T
+ F$ [) I1 I4 U1 a0 z# a7 {* {3 s
Oracle db2(IBM) sybase(sybase)0 r3 V r0 ~& A
sql server(MS) mysql(Oracle)8 k" J3 u1 R3 O
access
; W# ?( ]% g `5 l& D3 O( `7 o: |. T7 f9 ~* `
数据库管理系统(Database Management System): DBMS
- g9 f$ h/ C8 m3 m, P! A. J# M- A. [) ?
SQL:Structured Query Language
; o. H5 C; p# _结构化查询语言:和数据库沟通的语言。# y1 E/ Q3 f Y
) j m" Q5 H9 B2 ~$ @) {0 ]DBA:Database Administrator 数据库管理员1 l9 @7 m! W* _/ o% T; p
, s( {* l% A; H* u5 A1 g( s
Table:表:数据库的基本存储单元! m9 c9 y7 r& n% S G8 m6 G/ z- L
横向:行,row,record' ~% h( Q6 a4 a9 I
纵向:列,column,field
0 w+ A9 ]! K7 Q7 U( e, b" u$ C9 [% M* s
任务:把用户数据存入数据库的表中。% x4 R6 p6 Q3 e9 w
实现:8 b+ G0 y2 P2 I# \0 Q* k9 p
1.建立一个连接1 t% S0 j8 f) ^% @
1)数据库所在的服务器的地址:192.168.0.26
3 |' s1 E% r2 _ ~' Stelnet 192.168.0.26
_7 P7 |( U; ?& e# Q服务器的帐号/密码:openlab/open123* S" U3 R7 |9 V
2)数据库访问用户:
0 @- G" ]! x8 F4 topenlab/open123% F, q( m' h" a- @% u
数据库默认帐户:scott/tiger
4 c4 L) b- h b* }0 ^- V L) w3)oracle数据库的连接工具:# J+ j8 X: H, d4 B9 e
SQLPlus:Oracle数据库的客户端工具
d& F4 ~* c* K# F位于数据库的服务器上,192.168.0.26
/ G9 ]$ o- V! k. O. b4 e$ sqlplus openlab/open123) U' O1 k7 `3 q o
SQL> * m$ e3 T! h7 E& |% q$ ~: f6 V6 T
如果提示SQL>表示登录成功
! i5 t" Z& w! p9 B& V' j8 ]5 c! e" V, J! ]4 @; g
# t, m7 T+ b) d: R5 ?* v! x" W( } c
2.把数据表建立起来。/ H6 {5 s$ z) d- U( X
定义数据结构:
6 Y: T2 I' q8 g" ?4 mcreate table user_ning1(8 P" D, ^# p# o2 ^ q+ Z- Z) x+ F5 r
id number(4),1 \/ m1 z1 ]( B( `/ C9 W0 E
password char(4),
+ U2 d( }+ c% zname char(20),& [( }# B" c9 ^3 u2 z3 i; T. h
phone char(20),
. o' x* e2 ?1 Memail varchar2(50)
! s/ B6 m1 Q# y" t; P8 l);- D* N) K H& A; m3 U
提示Table Created. 表示表已成功创建。+ X1 N4 ]" M; D1 d5 h+ a
+ f* y1 D0 y% f, i1 X9 p数据类型:
- W0 p1 o; M8 q7 P- `0 a- v1)数字: 0 g6 S! C5 l: g
number(n),最长n位4 W! _( |- a4 _
number(n,m),最长n位,小数点后m位
2 z! @- K" {2 [- C# v8 Hnumber(7,2): 99999.99
' A6 j/ E8 R/ `( H) J) o$ B, W, q" J+ {/ `
2)字符串:
, B' Q/ L0 n: S _: ~char: 定长字符串" R5 g6 z3 D" c! J/ c# t2 E
varchar2:变长字符串' [1 C+ h: x0 o; Z4 D
char(10). Q# Q2 t# m9 b
varchar2(10)) s, H. }! K; S) l9 \( x/ U
3)日期
" T$ K; k9 j- Z/ a0 M3 hdate* J# O# y# L# p8 N: l
) S) G# @% M2 ]
清屏: clear scr7 }7 H5 r( N$ `& l
% @1 m. ~* ~9 N; {. B5 i' n
3.把用户数据存入数据表中。( r% E# x0 z: y6 e H3 x
SQL>insert into user_ning1) p3 {# H/ V j& I' E' x
values(1001,'1234','liucs','13600000000','liucs@sina.com');
% [8 W, w# ]! f! L: G
: a: r' O/ ~& E5 H$ H! K8 P; F7 ~insert into user_ning1 values(1004,'1234','liyi','98765432',
# }' b; ]* b+ L5 N- R'liyi@sina.com');
' W3 _) u8 ^6 k4 W
9 l/ E2 {6 |, Y$ n! A# M$ I 错误语句:
u; k4 I3 e* c) W- Y% Cinsert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);9 i% J9 M# q# r ?; ^
& [% q+ B a: I: q4 k2 D }三种SQL语句:
! ] X; v0 g! G1)create table...# U% ^' j: i4 d7 N6 ?4 F' S0 r
2) insert into...values...
9 q* t3 y, c& D4 O9 x( d2 p6 J9 w3) select ... from...
. Q# |1 ]7 v+ {, q
$ V6 S3 D# W2 x# N0 i9 `SQLPlus命令:
3 k ~; z/ c! a* l' ?9 R设置每行数据的显示长度:1 U0 f/ n4 _$ M8 W7 w8 U$ L0 t
SQL>set linesize 200
# q; K8 G) X9 t# T# Z6 |. [设置列宽:10个字符
- Z# {+ |% S3 U) d2 t/ a9 f( ySQL>column 列名 format a101 \. m$ B% t+ P6 {2 ~
查看表结构:desc:describe 描述+ w: u' T; @0 r" a7 Q1 {* D* I* g
SQL>desc user_ning1: B4 @+ [, t6 i% [& m& b {
& }4 M. _; `& |: s规范数字宽度为4位:1 I& Z% I# X0 v; \# T: [
SQL>column id format 99996 R1 ~: t3 ?$ [9 ]; o$ `
简写:; R! a# s% Y5 }
SQL>col id for 9999
! W: _4 c! Q) `, w' S7 | R& p, m* ]6 l/ J( Y o! T( r
--*表示查询全部列% d3 _6 \8 e3 y: x5 W) H$ o
select * from user_ning1;* L& ?. p% _8 U1 V
! y4 ]& r. |" l! }1 m6 Kselect name,email from user_ning1;. P. e2 \8 d2 `
C3 [5 ~# Z1 x/ L) C
--查找1001/1234考生的名字?4 w! W8 P2 i4 E- d2 {* ^
select name, email from user_ning1% ]# \0 w* Z( _1 `
where id = 1001
5 R% l" B. n' V% Mand password = '1234';2 x$ g1 r w# k$ o2 s
' p" X7 D5 O+ r% p& B! v1 X
数据准备:
6 W$ {9 y( Z4 L! l$ }1.表dept_ning: f$ S# J) t& C, Y* s: B5 q
create table dept_ning(
. _! o$ M3 ^* A) X, D+ ldeptno number(2),1 V/ E& _" n) ~" O$ D
dname char(20),
! l: ~% z7 J* B2 A- n: Clocation char(20));$ F9 _- i7 K$ a! h7 X4 O/ x# D# T" i
1 H, ~* E2 |2 L% r8 G4 v+ { ]" b3 J
drop table dept_ning;
# l: W; p4 _5 I; W C3 {, `6 W; F7 [$ o/ W7 l. Z+ b# t
增加数据:
* c1 K& y$ P1 W& xinsert into dept_ning values(10,'developer','beijing');+ @" ^8 F; V% _
insert into dept_ning values(20,'account','shanghai');8 I" {; c0 D, U# k" b8 U
insert into dept_ning values(30,'sales','guangzhou');5 e, t! F2 S2 @3 B! p) s" m2 H4 r
insert into dept_ning values(40,'operations','tianjin');- c4 t$ Z% |; r5 G2 T* G$ w
# a, ?0 |1 H5 K3 t) c' F5 Q
commit;9 q5 [+ }, w2 ~1 | B$ G. X* c
4 w- i; [. @3 C. u- i: w3 T) O
select * from dept_XXX;
. W, G. d: q; c% g: @
) x3 l; c9 u# l8 i2.emp_ning! M! T2 A" A0 E" F# x+ `
create table emp_ning(" r% j+ b. S1 z6 r8 a
empno number(4),
9 J8 n9 l- \& N6 ]! i/ Kename varchar2(20),
& } S2 K& T8 tjob varchar2(15),( A. @) \# D' e" S N3 N
salary number(7,2),
3 k R& c$ d! M7 w5 e8 R/ cbonus number(7,2),
, v. a( V* \* l+ X4 lhiredate date,
5 w8 \$ A' t4 s1 l% Vmgr number(4),( F" x* Z. p1 g" m5 p
deptno number(10)
) D d5 U) ?* j9 \);
. B# L8 Z7 h1 v7 b: N" S, I! l Z4 E7 l1 `0 G$ s4 W
insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
: w" l8 O1 `% @5 e/ _, Jinsert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000, '01-APR-11', 1001, 10);
( _4 K) U# Q& hinsert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000, '11-APR-10', 1001, 10);0 O9 \2 l9 C3 s0 C# b
insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10); e. T( p8 ^* t& W% r
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);- P$ I$ _; C0 H2 ?+ p1 f: n, R
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);! L# ?" z# d+ C. {8 D
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
8 M [! Q/ f4 H5 I. {! rinsert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
/ _$ ^' U8 @0 Y, ~$ G+ Z, Vinsert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
3 N- [% L$ n$ f, Ginsert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);
* m$ q# B( s, y7 b B) p
, _6 e. }$ A! \, |, n/ R! Bset linesize 1502 D& L( ^8 I' n$ v A9 Q
col empno for 9999
% W) E' C+ V4 S. K3 i! ~# Gcol mgr for 9999- w0 ~! _( k1 q! T
col deptno for 99, `3 p! E4 T2 h
col salary for 99999.999 o x- { S" l }! n0 c* F
1 o# G6 |# l5 \3 p3 F
select * from dept_ning;
3 w0 O& T% q$ X' `8 \0 Xselect * from emp_ning;
0 l4 S# V* U# G u) r. a9 u
$ o9 z7 [' m" c2 i& j1 r( X一、学习查询语句。
9 N$ R, v( B9 F5 z; L. a1. 计算员工的名字、月薪和年薪?* t6 e5 s* y9 B% c: c
select ename, salary,
( o# S! o r/ _) u' m& f5 Y# osalary * 12 year_sal
0 B4 ^5 L3 ?+ o# d$ |: @from emp_ning;; ?7 |& ]# J F; P
) ?) r0 F ^5 J! U$ I7 ?* B0 n" Y c1 x2.计算员工的月收入?8 g* ~- j5 m3 U
空值和任何数据做算数运算,结果为空(null)
Y) }0 Q1 g1 }6 g: u) {+ rselect ename, salary, bonus,8 `7 _7 Q! b6 W6 _& u' F
salary + bonus month_sal
8 L' M0 r: a# ]3 Lfrom emp_ning;
* W+ {' F/ o2 Q( F5 m4 `3 n, i) w7 O# v
select ename, salary, bonus,
& I* O( h2 R4 G8 {5 g* B salary + nvl(bonus, 0) month_sal' O/ `/ A: H6 y7 u% q/ k( L$ n
from emp_ning;) K4 Z9 v( G6 M; c) A# F
5 u5 B/ i$ i- Z, q7 v9 M
public double nvl(double d1, double d2){5 s6 `3 y; b3 d" Y8 |4 t
if (d1 != null)
" j, ~" b4 h! M) y3 u return d1;
0 a* p& a1 y9 Z1 o else ; b3 X! B& Z' M" ^) ~ M @
return d2; ! }. v( i, W3 n( e5 j4 V+ W, N
}
5 K) C0 h& B1 X$ }% M& D" Dpublic String nvl(String s1,String s2)
" G! F2 o9 Q! ^" F# }{7 N' d( S) C, r, } m8 Z r" v" H
if (s1 != null)
& L6 ^3 _9 x7 z H# s0 z return s1;
) H& w$ b7 a0 y9 T4 N9 s else
) Z4 F; a! X6 L$ T" ~4 J) d! y return s2;
7 k, i$ n% A4 ?# v" G9 Y* {}
% }/ Q6 ^, V) X" q3 Jpublic Date nvl(Date d1, Date d2){# e; B7 A9 h; O; D" N. V6 H0 s# T
return (d1 != null) ? d1 : d2;
' A0 Z1 D" @; t/ D2 w2 Y}
' i9 w$ k# k5 \5 U9 ~' ?1 J5 Q9 g
insert into emp_ning5 m9 l2 l8 c9 h8 f# C. w( f- B! z
values(1011,'余泽成',null, null, null,
; {1 u! C; |# _0 Unull, null, null);8 `6 D1 [& Y* {1 ]# l
简写为:
" [6 ?* r! _# T% ?5 T/ [8 sinsert into emp_ning(empno, ename)
9 {( m- Z/ }4 p( Pvalues(1011,'余泽成');
( A% r, N# J: w |: p; L0 K9 f/ e) x2 j; T! [# u, m
查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。- t, ]/ a4 \7 m$ `' a- F0 u$ ]
select ename, nvl(job,'no position')
8 X6 X) Q4 B6 ]2 o1 ^" ?from emp_ning;. ? M3 e+ d: i8 F# a
, L' z1 n' e; d3 b0 X
查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
+ n4 Y! b. f r1 E" S( t/ W3 qselect ename, nvl(hiredate, '10-OCT-11') from emp_ning;
# m3 [# |3 W1 h" p/ x; O0 |' M
- j5 ]9 P4 S/ cnvl(bonus, 0)- B$ a. Q) ]- F7 L4 k. y- ^+ `& a* f
nvl(job, 'no position')" n/ {0 e V. I
nvl(hiredate, '10-OCT-11')' S4 |" u5 P: A1 A) D9 d5 X
2 I3 M6 O% [; g0 Y% x$ c7 z
--复制表emp_YYY为emp_XXX5 y$ y: U' b! y* g4 m5 Q
create table emp_XXX6 m( z" |& `+ k, m3 T/ B
as
: H6 s% m6 A0 ?6 U$ K. O& y- Eselect * from emp_YYY;
$ J8 x: I5 G5 s: {/ S2 M$ N$ {! O, A, z5 |7 V/ t" M
3. 机构中有多少种职位?3 d: v( ?' Q* f2 i; k J; @) }
select distinct job from emp_ning;
+ t/ X" {1 G: l! T/ t1 }; N4 k
8 L1 \ b1 g3 Q: I员工分布在哪些部门?/ l% }* x4 R/ n) k0 V) x' J2 ^
select distinct deptno from emp_ning;6 \7 I4 j/ H* G
, i0 `+ W# A$ K" T0 |% B0 Z, bdistinct必须/只能跟在select后边。5 U7 c; ~, \' x( m& `
! P1 b) P$ G6 N( I ]4 S! {
4.薪水高于10000元的员工数据?' B7 Y7 m0 F* i2 D* ?5 b5 l
select * from emp_ning* p3 \4 e) a1 {$ a9 o9 S
where salary > 10000;
4 m0 A) o _' u% S2 o$ M F; G* i6 H: k/ y5 a) \ @
5.职位是Analyst的员工数据?
# C" N1 g6 i! r0 `6 ]select * from emp_ning
7 n* s o6 W: u5 O8 P' owhere job = 'Analyst';/ w- E+ l5 R. J8 s4 [- N% r6 H. m
, g' q" H5 k" w0 K1 w. T, aanalyst ANALYST anaLyst
. p4 V1 F% n1 V4 F* a& s9 v: E
, u; g; p/ T* n' Y kselect * from emp_ning5 P0 {4 v! Q+ K j! m
where lower(job) = 'analyst';$ V# o- }: y7 A. ^ e. P+ t
# d+ `" m( h+ i; D. ?2 f( F0 Q) Z2 _
select * from emp_ning
. N- d. b# m) e* _8 Bwhere upper(job) = 'ANALYST';
d: }0 u; p4 D- y
, U- X% ~$ K$ V0 p& T" ~) }--如果数据是analyst,查不出结果
! S4 r0 @* ?. t7 n--SQL语句大小写不敏感,数据大小写敏感4 Z% O$ w& C7 M; D+ ]4 l
/ T9 B' w. p. \6.薪水大于5000并且小于10000的员工数据9 E! f6 ]# n* M# e# x* ]- E+ |
?' ?% i5 l8 W! K( Q5 K" W# b
select * from emp_ning
+ D# e) }' j! y; Wwhere salary >= 5000
c" ~ C. Y Kand salary <= 10000;
- M1 Q9 x7 S$ \2 `) ? @- _% Q3 F* a$ O
--在区间中:between 低值 and 高值
6 L# R; v# m# |+ q0 i8 P* k* R--闭区间:[低值,高值]! C8 Z1 X T7 q4 C$ ?8 v* r/ Y$ ^
select * from emp_ning
}/ R3 G6 G6 `" mwhere salary between 5000 and 10000;
- g$ _3 \9 W3 ~" I: a o9 g( {! D4 v4 g
入职时间在2011年的员工?8 E% Y, J6 Z( [7 m# s2 }
['01-JAN-11','31-DEC-11']. \3 f a" M0 U, {
select * from emp_ning# Z* {( x4 \$ I" K& v+ _
where hiredate between '01-JAN-11'$ [$ l/ u+ u7 B2 k6 T
and '31-DEC-11';) u1 P- i; _9 n
- p3 _, l- F1 ~. X4 G7.列出职位是Manager或者Analyst的员工
9 \# z% z; N, i3 s?6 w/ G. }" m) d7 s
select * from emp_ning6 T) W2 q) y0 i9 z# B: B$ R
where job = 'Manager'
" Y+ G6 o7 w( ] O/ hor job = 'Analyst';
0 y f/ m1 g+ U* {--等价:in (list),在列表中。
- m4 F. D! ~5 }3 n+ b! bselect * from emp_ning) o, y! u3 ~7 P! X
where job in ('Manager','Analyst');
/ n2 C7 e$ i( s+ C5 X t" L8 r9 w
8.列出职位中有sales字符的员工数据?8 P4 t- G: B% ]7 W, \5 t- `+ u
salesman
! w+ f1 s8 Q( ?' x- J# hsales
. B. v2 t# X* c! {before sales
- y. r2 M& {6 J! \! s# G, Vafter sales0 A/ B; S) N) a
before sales engineer
- E; J: {3 e6 W7 ~
; u" N/ o# ?" ^# F' y* o--%: 0到多个字符,跟like配合,模糊匹配
% D) {0 \' P w! E( k) `, n$ Vselect * from emp_ning& b: _. r( S9 ?& k0 T9 x: P, L
where job like '%sales%';
4 j; B5 k. L: f# M, h" A: R3 L6 H# Y5 k9 M: v6 N
9.查询哪些员工没有奖金?
9 h% |0 ^9 ~ ]( Wselect * from emp_ning: `# n' F. f, d/ ?
where bonus is null;
H5 ?7 b, a' m; z
0 }' j- D9 l! Q2 a1 A# A. Z( s( I( A哪些员工有奖金?+ q* t \+ \3 ]0 n
select * from emp_ning4 G) M+ W9 ~# n
where bonus is not null;. |& t" w1 k# v6 L2 F
; H# U6 U# k( H4 m- U7 {
小结:6 ?1 r6 G! d/ S- A: y& ~ S! {4 t
1)create table ..., V- T+ _5 j3 D) z) @9 n" [6 d+ N
drop table 表名;2 L2 \, d4 @' W# s% G! ^# s5 `2 }# ^
2)insert into 表名 values(...);: S" I: v* D6 ]
3)select distinct | * | 列名 | 算数表达式 | 别名
& X4 ^3 z5 R# X5 ]% ?& s/ v; h' M from 表名
9 v. T8 b3 y: h( Y, ?* t- ] where 条件1 or 条件2 and 条件3;
) X- U3 `! T3 `& s* U" q# W1 r* {* V' P+ H
> >= < <= between...and... in like
! e9 y1 T0 ]. w1 [: x
2 R# c9 o& K" r7 j# A |
|