- 注册时间
- 2008-9-13
- 最后登录
- 1970-1-1
- 在线时间
- 0 小时
- 阅读权限
- 200
- 积分
- 0
- 帖子
- 24482
- 精华
- 4
- UID
- 9
  
|
SQL分类:! z& x1 }6 ^: g; \& S* v
DDL―数据定义语言(Create,Alter,Drop,DECLARE)
9 G" f: a) S1 ~ M: ~DML―数据操纵语言(Select,Delete,Update,Insert)
% W$ s/ _8 v, `- ^' F) P4 {DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
8 L5 m n! y# n) G8 z7 h# U$ }
u9 `' n+ _) F首先,简要介绍基础语句:
- I6 K5 a4 \& C; I1、说明:创建数据库5 i9 [1 a: j$ o- e$ ~/ G
Create DATABASE database-name2 H' t2 k% V/ M; k7 M) U
2、说明:删除数据库; g9 l; O- r0 f. d/ y8 V; ~# s8 i
drop database dbname* z. e- b2 C* B& k
3、说明:备份sql server
4 @! P( M. W5 M* z/ q--- 创建 备份数据的 device
6 o5 v8 C' _/ Y% eUSE master
# o- e4 q/ j2 MEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
7 t9 E3 L. r0 ^% E--- 开始 备份: e v: @6 _+ ]$ b; b
BACKUP DATABASE pubs TO testBack( G/ ?2 C; A! L
4、说明:创建新表" K6 |+ B, `# c
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
" e3 ?3 @+ p; S8 B. d! A# x) ?根据已有的表创建新表: c s# E f1 H6 ^' y) a
A:create table tab_new like tab_old (使用旧表创建新表)
/ E6 S a E7 ]9 |1 AB:create table tab_new as select col1,col2… from tab_old definition only& ?6 C$ t* ~' H
5、说明:删除新表
J2 B; j% f6 M+ e4 Gdrop table tabname
% q9 k1 }& I+ M7 A4 o% ]0 [6、说明:增加一个列
1 ?6 i m) i1 N3 h7 `Alter table tabname add column col type
& h" V* E! ~$ y% y# P5 y注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
1 P9 ]" W$ I, @) ~7 M7 p; J7、说明:添加主键: Alter table tabname add primary key(col)
# q. v- ?& t3 v2 ~说明:删除主键: Alter table tabname drop primary key(col)
4 g5 q# F9 h0 K& W e C8、说明:创建索引:create [unique] index idxname on tabname(col….)
: Y/ L1 Y+ X# O+ j) k* r删除索引:drop index idxname
) ?, n1 w0 N2 J. I: q. H( _注:索引是不可更改的,想更改必须删除重新建。
( s2 e U1 O) K9、说明:创建视图:create view viewname as select statement2 f. p& L2 q" D
删除视图:drop view viewname: R& \2 {+ i7 Y: w, M8 p5 N7 }
10、说明:几个简单的基本的sql语句1 x! o6 [- n6 a( V
选择:select * from table1 where 范围7 I% l6 i- O" j2 C0 y" A( L6 D9 y
插入:insert into table1(field1,field2) values(value1,value2)
5 e$ g7 Z4 ]# z7 M5 b# K5 z. U删除:delete from table1 where 范围
, |9 F! m6 c, Y( T5 E* c3 [更新:update table1 set field1=value1 where 范围
Q0 J# ?! T7 D' M查找:select * from table1 where field1 like ’%value1__’ ( F5 Y1 B- T4 `6 v7 p$ k7 m3 L. @
排序:select * from table1 order by field1,field2 [desc]
- y$ ]7 p$ @7 h: t6 e! N0 t总数:select count * as totalcount from table1
& X% {! b* B# ]; @7 N; b$ E( b求和:select sum(field1) as sumvalue from table1
3 q: r/ f6 j; \! o平均:select avg(field1) as avgvalue from table19 v* @! B( e, d& R* D
最大:select max(field1) as maxvalue from table1
/ R: R) J; _9 Y8 V5 q; O O6 k最小:select min(field1) as minvalue from table17 g- S+ {) \# W: z
11、说明:几个高级查询运算词
8 U5 h$ z5 d' W& h9 ^A: UNION 运算符
3 i0 }' ]7 Q4 X7 y' \1 z8 PUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。3 l3 r# t0 [/ y' I4 M; l1 z4 g) Z
B: EXCEPT 运算符
8 |6 R' M7 v2 b, d5 JEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。" h: A) n3 u a: Y7 Q2 x* @1 |
C: INTERSECT 运算符
0 f- g/ d! ?9 y. VINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。6 l2 A B$ U) O2 `9 O( s; ?; y
注:使用运算词的几个查询结果行必须是一致的。
( }( g; X. h% I1 o5 T3 L7 @2 {/ l, f) W, b2 p3 Z K+ f+ x9 Y
12、说明:使用外连接
9 @0 t, r" D, a6 G, _' C6 @A、left outer join:
0 D c3 `# \5 Z( v- T左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。1 q$ a% O0 z% I. v* j* U: a& m( D
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
: x8 w2 Y7 t9 \B:right outer join:
2 {: h. q: |2 P' ^$ o右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。. U [* t5 N# M1 S; Y
C:full outer join:
! a& t( M2 Z q3 G9 U全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。/ X+ _- M* `5 S( \5 e
) J, P- `0 j8 o! \: B/ G$ A4 r
其次,大家来看一些不错的sql语句
9 e- P. M4 r( i7 a2 ?/ i3 a1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
J6 Q; o) m6 K! I% ?+ n' t法一:select * into b from a where 1<>12 t/ i4 V: n1 X9 s$ W h
法二:select top 0 * into b from a
2 H- U; u: T: \) @! v4 V. P4 t; R8 ]$ Q7 Z( L0 d2 T
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
3 ^& F1 x5 C. f6 U4 M8 N* einsert into b(a, b, c) select d,e,f from b;
2 r. j+ H+ \) s+ a3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
( z- i7 s( @" ^ \. `3 h6 iinsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件* h" `5 ~% p$ {$ J, Y
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
2 t' O9 S: C, _9 U( U2 O* G2 s# o( T9 \: P" ]4 x2 S# p8 r
4、说明:子查询(表名1:a 表名2:b)% I' q8 x7 N. [8 p! G. T6 ^
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
9 \+ L* r3 h, \) u6 Z' d
& M) N/ B& H% ~% M- R5、说明:显示文章、提交人和最后回复时间
0 {+ x% F8 ~0 J [select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b/ F# y$ o' Q( X+ L& J/ f) P; o, r
2 |# W( f- {* U5 o/ t6 j9 u# y6、说明:外连接查询(表名1:a 表名2:b)/ `9 s: D1 f% P; X* g
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c8 z+ L& R9 e! M- g
, H+ ?, o5 ~, o t& q. K
7、说明:在线视图查询(表名1:a )
1 I( G5 X# I) @' P% R2 v4 c5 Cselect * from (Select a,b,c FROM a) T where t.a > 1;* R. [$ ~. [: O: ]1 K( }7 M2 S! y
$ s' Y* `' W3 i
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
' {$ Y: s0 E+ ?select * from table1 where time between time1 and time2
( c' N6 _' ^! vselect a,b,c, from table1 where a not between 数值1 and 数值2
/ V* c1 a8 R5 ~) Q1 u
8 E2 C1 T6 M* D3 g9、说明:in 的使用方法0 {& [ i' d2 B# r1 N" t
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)$ R5 l% R# R) _9 t2 M4 A: b
+ p Y* F& ^0 i" }0 r: s/ O" k10、说明:两张关联表,删除主表中已经在副表中没有的信息
4 b$ X |! E7 q$ \9 V- a3 qdelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )4 a& S" U3 R; @, O
: Q' x' h8 S) i: Q4 S2 I E
11、说明:四表联查问题:
* F2 x$ ?9 ] x: I. Z4 N5 f5 oselect * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
3 m0 k. a, H! Q4 Z X3 l4 m+ W
" z9 r+ K* K! f& M* C" V12、说明:日程安排提前五分钟提醒8 O9 \- Y1 j8 h2 k2 S
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>51 C. l' P& e" D2 k. [3 B) [ N
# k/ \: I, o. U S+ ]8 i13、说明:一条sql 语句搞定数据库分页) }. b/ I8 m& F6 _' A' I$ x
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段5 l! ~9 K) o+ ?% r
0 f/ l3 F9 s: ^/ `# ?, p! b+ x1 _14、说明:前10条记录
3 P% `8 ]6 u0 ~, | E# u& Sselect top 10 * from table1 where 范围" V# P8 B) j1 B7 n
: X+ n ]2 q8 ?) `% i15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)- \# F8 n. A* C( e) j2 j
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
: O: y7 o8 S) c6 y$ x# k: `8 p% v# ^
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表+ \7 }5 ?# W% m, t8 _9 Q/ I5 C
(select a from tableA ) except (select a from tableB) except (select a from tableC)& M6 y2 y; z/ m1 ^
" J4 z9 _! D- T, Z) Y
17、说明:随机取出10条数据
! \; \& r7 Z( M) F0 N( r5 X. k# t. Wselect top 10 * from tablename order by newid()5 d! M% K- W2 ]# a
t" k( N: O/ c
18、说明:随机选择记录
! o+ O- a8 \% o$ C0 `7 N1 {select newid()
2 |: [' P3 T5 n3 M! k3 g K7 V3 d! | ]! Y1 F$ \$ c0 I0 a% |; e
19、说明:删除重复记录: f' D0 c: g) h- f4 Y) ]
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
7 J) E) ?3 }1 g# v; p) X; j# \- C. W$ x2 k) _% X8 T* ^
20、说明:列出数据库里所有的表名' U# ?8 n( [# r) Q
select name from sysobjects where type='U'
6 G6 v$ W$ |/ T$ M2 M9 F* ]/ ^# Q+ S) W9 d5 Y
21、说明:列出表里的所有的
6 H; t. H+ p. Jselect name from syscolumns where id=object_id('TableName')4 _+ ?1 L8 s5 D( f J# }9 K% V
# k0 A/ |: z8 |; Y2 \( ]22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
# t, W# R0 d2 Y+ m) a9 M% v$ S+ Vselect type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
7 E: u6 F8 x5 Q9 I显示结果:1 k. j; X! P1 P: B
type vender pcs+ }- g: `, c5 i5 C
电脑 A 1
, C8 I: l+ M5 g, w% S电脑 A 1
5 |4 ]$ o9 w" E( m光盘 B 2
+ O( l6 O. D7 o* F光盘 A 2
/ _ c- w+ ~( K' v手机 B 31 k' X) F7 p$ U6 L
手机 C 34 g3 Y, s7 h; I3 H
! R9 {! o) Y7 M3 K7 \
23、说明:初始化表table1
8 c0 J! T9 q3 P; R0 @- _TRUNCATE TABLE table1+ v" C9 l7 j, v6 A5 W# \
* f3 T3 a; K: N+ H |5 w) Y* q7 H# x3 h24、说明:选择从10到15的记录4 o1 D! d. q. ]$ S
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc |
|