SQL分类:# p; e% V' w6 E7 [
DDL―数据定义语言(Create,Alter,Drop,DECLARE)8 [" \7 T4 N; P7 N$ s# m
DML―数据操纵语言(Select,Delete,Update,Insert)4 L! M) o! f! a$ B( P
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK). p) c& M; i0 ?0 b3 Y
+ P7 @( G1 L: _& N! k! q% [
首先,简要介绍基础语句:2 m; a+ ~7 b: P7 I0 B4 s7 Q5 R
1、说明:创建数据库, ~9 f" s# j# D) t1 K8 `1 y
Create DATABASE database-name + R' b2 B& o# _! g2、说明:删除数据库 ) L0 x0 I# Q% |' q/ [drop database dbname. g, U3 v3 _0 Y1 E: Q \8 s
3、说明:备份sql server & X; V" M: E: ]) `. g$ o--- 创建 备份数据的 device ; _& n; d- i+ T% ~6 qUSE master 0 |: [2 u: J5 x" A7 Y7 O+ eEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' " K, E2 f3 B% M. H1 D) b9 K--- 开始 备份 . D6 Q/ D O6 P# D6 K4 X5 ~: `BACKUP DATABASE pubs TO testBack & ^6 i9 N/ J2 P* `4、说明:创建新表) }( \& E# m6 t
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) $ o8 p" K! l# e$ ^根据已有的表创建新表: ; ]! w( J% P8 ` r: n; nA:create table tab_new like tab_old (使用旧表创建新表)0 o# d7 F( A& {5 ?+ a4 p
B:create table tab_new as select col1,col2… from tab_old definition only 4 U& a: G0 \& F, b$ W5、说明:删除新表( O% S+ }# }% O+ m9 f
drop table tabname ' F7 j% W* {" z% G; ^: o2 `' z6、说明:增加一个列( E% V. z4 a* ^9 J y1 E
Alter table tabname add column col type 0 h, {' h. x4 ?8 y. K2 j$ T) J注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。3 u+ a, e2 u: v- E" \, f
7、说明:添加主键: Alter table tabname add primary key(col), A7 o, D- W: W, e: l' \9 D" f
说明:删除主键: Alter table tabname drop primary key(col) - |3 c. o: K+ ~8、说明:创建索引:create [unique] index idxname on tabname(col….)* u* o1 w; l4 T% X# V
删除索引:drop index idxname& v! }+ u# L0 j6 Q- X# P) l k
注:索引是不可更改的,想更改必须删除重新建。 6 f/ ~6 l5 Q( [2 a; i9、说明:创建视图:create view viewname as select statement5 ]9 N* B, X1 z
删除视图:drop view viewname0 c( i s" q9 t
10、说明:几个简单的基本的sql语句/ o# Q! s/ b4 L* y7 S9 N; r9 h
选择:select * from table1 where 范围 : d \! X+ ^3 n! g7 _插入:insert into table1(field1,field2) values(value1,value2) 8 U" k# H: _: ~& z' S删除:delete from table1 where 范围0 j7 O# u) W: B$ a3 W4 o
更新:update table1 set field1=value1 where 范围 4 W! Z# M" f: ~% I2 O- E- G& B# |% `查找:select * from table1 where field1 like ’%value1__’ # j# `& R& l* K) ?; V% R排序:select * from table1 order by field1,field2 [desc]1 _% I w5 t! k+ {0 I7 O/ o# h
总数:select count * as totalcount from table1+ h0 i# ~& R! K; Z5 X& H
求和:select sum(field1) as sumvalue from table19 b6 }- j: |; I
平均:select avg(field1) as avgvalue from table1 6 k- A( `9 T, C( ?. Z" u最大:select max(field1) as maxvalue from table10 ~, `! `& `. D! |6 c! X
最小:select min(field1) as minvalue from table1! @/ [! {" k9 p2 t0 ?
11、说明:几个高级查询运算词9 D. p% D2 F4 N8 ~: X- @
A: UNION 运算符 5 f3 |$ T+ a2 B7 X4 |. E4 ZUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。/ D& Y! H- c* r( l( }
B: EXCEPT 运算符) Z/ e, a3 n# B, C" P: L
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。& r t7 U3 C6 f T$ y6 ?
C: INTERSECT 运算符 8 z" h* S9 ~1 E- {, u6 y y3 {INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 $ i* j" W# b& M' A注:使用运算词的几个查询结果行必须是一致的。" ~" h6 ~. Y% f
. g# I5 m* H+ p! F$ Z' ^12、说明:使用外连接$ t. e* Z( |/ q* H$ e
A、left outer join: + E1 q3 t7 m/ o) ~ F左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。' J. x' t, ]6 k9 R* M, G
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c8 ~- ?1 w; H d( y% Z
B:right outer join:- ~5 K8 d4 f( h- ?5 ?
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 ( z% g; ~4 C& u+ ?& v* z& V' j4 p MC:full outer join:$ K! A/ P% v6 J2 V E3 S, Y5 G
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 # R' Q9 b7 K& v3 O- o' K# N/ W+ e- I4 y
其次,大家来看一些不错的sql语句* ~* O* {* {8 E; l7 R0 l4 P; y( \
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) + h& b* A. o/ p5 ~法一:select * into b from a where 1<>1 * z. x M+ w4 V1 N2 {1 M; p* F# `法二:select top 0 * into b from a+ T+ w5 X! x/ ?' Q0 \
9 T# y$ d5 Z1 T7 C8 O3 @8 a2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用), {2 f. @: a6 m) B1 `0 U
insert into b(a, b, c) select d,e,f from b; , @' r6 l. ~3 @* W" w3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) / |0 P$ f7 Q; Minsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件. z/ J5 d7 b- j' L$ z% B5 R7 k7 n( f
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. ; s8 c* J$ c# s% N ( q" m1 D3 @7 m4、说明:子查询(表名1:a 表名2:b) ! ^ |: X1 U5 G. T- L9 A/ Uselect a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)/ E1 H6 Y) H, R7 R4 O# n& ]* `
7 R6 Z# d6 }6 n% w& E5、说明:显示文章、提交人和最后回复时间 6 |6 I! m# y0 M% }6 A5 [, Pselect a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b2 k7 R# k4 ^4 X: P; ~# _6 A! b
' Z6 B- k4 y3 [8 l
6、说明:外连接查询(表名1:a 表名2:b), f* j5 [% u ^% c3 a
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c6 r7 b" o1 w7 G. B" b! O% D+ o
) x0 g7 }1 i+ Y; V9 U7、说明:在线视图查询(表名1:a )) q J3 r* ^- O6 }
select * from (Select a,b,c FROM a) T where t.a > 1; 5 [- x3 o; F# ]( F1 b5 b' a1 x3 }& ?. }; U
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括7 E' F1 \4 \7 A& n" O: t
select * from table1 where time between time1 and time2. |4 t. ?. ] \' @+ J
select a,b,c, from table1 where a not between 数值1 and 数值2 ' J, _5 `/ Z0 O7 V" H7 \/ S 0 |# @; X+ F- |. j: p9、说明:in 的使用方法! o* H! ?9 j2 t1 o% y+ v. ]
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 8 q, b& C" y @% m% a; n' f$ x( \8 ~6 u" o) d8 O. z- R% H
10、说明:两张关联表,删除主表中已经在副表中没有的信息 . E& t( I) i7 c. m* k% rdelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 1 }6 R3 |. N( z, `1 ^/ w& Y5 A2 {6 T
11、说明:四表联查问题: 6 y* {) A$ x6 `/ Q% bselect * 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 ..... / S0 l5 A& y+ ]. h1 S 5 w/ c1 \( W+ I- a2 H* o12、说明:日程安排提前五分钟提醒 & P! k4 d% ]9 K5 jSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5( o) W/ G6 ?" E' m: p2 o8 J: J
( W" }% d: ]( W13、说明:一条sql 语句搞定数据库分页" p8 U* S- V7 r& H* h; S4 a
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 % t/ }$ ^4 A) n! [' C$ H ) P! W9 \9 e7 T( R, x14、说明:前10条记录4 b3 M2 }+ V3 ]9 \+ k
select top 10 * from table1 where 范围 2 i U/ H. S K$ }! F% z( q. U7 }! s- B5 u4 s2 ^
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) 3 W+ n/ c( F+ q/ W& |# P1 e! [select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)- W% Q0 e1 w; C% x% S: Y1 [) \( s
1 G2 l m2 r* q% t; ?16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表/ K [! ~ `& t' n
(select a from tableA ) except (select a from tableB) except (select a from tableC) " O7 o' f( t7 b9 l1 J$ s) d2 l: X
17、说明:随机取出10条数据9 q" y1 T6 y3 a& V$ T* U- E! L
select top 10 * from tablename order by newid()- a3 ]7 e) D0 Q3 W: P/ x) _
2 c7 }/ {" h; E
18、说明:随机选择记录: c- {% a3 @) n2 V; b( z
select newid() 4 `$ Y! X! X8 F9 Y" ^/ B. ?& B4 f5 d 0 v; E5 D( R( }% @- M19、说明:删除重复记录 ( Z1 ?/ {4 f9 |Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) ' J J; E) M8 R3 d! o! y: s " e/ A3 e9 E) @. E20、说明:列出数据库里所有的表名 ! J1 i: t( N# k6 o4 Wselect name from sysobjects where type='U' c% p4 @ l. E j6 ?& C% D: \! Q0 Q' n8 x4 V, h8 t% j+ |# I8 s* I: M
21、说明:列出表里的所有的! _/ q" D( m) e. P% ~( T+ _
select name from syscolumns where id=object_id('TableName')1 h, B& @: ^2 B, c
0 l- ?1 y5 w T3 d
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。9 m& |4 l; I- X i2 J
select 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( `5 I+ {0 ~8 K. j
显示结果:( m6 G8 z: ]$ P1 ~+ B0 X* }" K, t
type vender pcs t3 g/ `: Q9 _, r6 ^3 n- L电脑 A 19 M4 Z5 @5 m5 k2 y
电脑 A 1 5 b# P' I. @* X& s4 o9 d, E光盘 B 2 2 g- K- ^* O3 c3 \2 Q2 z6 x光盘 A 2# s7 [- D. i, B! A3 c
手机 B 3, Y7 ^. ~* L' e" P+ O2 d% X
手机 C 3* Z8 w: B% S- J) r
5 T9 L% {, p6 O3 F2 g- P23、说明:初始化表table10 Y* m2 R3 V8 C2 ]: }
TRUNCATE TABLE table18 Y7 n/ Q/ D6 @1 x2 t
, h2 h. |4 [2 w0 G2 `9 a# G
24、说明:选择从10到15的记录7 k/ u: b |" J* Y6 w
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc