- 注册时间
- 2008-9-13
- 最后登录
- 1970-1-1
- 在线时间
- 0 小时
- 阅读权限
- 200
- 积分
- 0
- 帖子
- 24482
- 精华
- 4
- UID
- 9
  
|
SQL分类:
( T0 Y1 ?8 m0 \' A* T# HDDL―数据定义语言(Create,Alter,Drop,DECLARE)
1 z# ?, }% g: r1 L: CDML―数据操纵语言(Select,Delete,Update,Insert)' U1 h! L* } C: y4 H" j3 r' p
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
5 c$ n5 ]8 }8 x4 \8 ?6 M# t" ~2 L
% b' `- B ?- \5 h) d* I ?首先,简要介绍基础语句:) M& m7 j4 t1 x ?# U
1、说明:创建数据库
% ~+ f7 t0 y# P3 FCreate DATABASE database-name
2 d& }$ A& _/ C) ~& [" |2、说明:删除数据库
( g( w9 x6 h6 v* }3 o$ `drop database dbname
7 I. @ X. {: M5 h- K3 c3、说明:备份sql server! \+ T* G( ^5 ?" ?9 u
--- 创建 备份数据的 device j' W2 m/ e# `# _( j
USE master
! U$ M+ e8 X1 c/ \EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'" o v3 D& [+ t9 Q
--- 开始 备份+ j; x+ r- ]# p' ]: F# a
BACKUP DATABASE pubs TO testBack
6 j$ O: ?% g# f9 l0 S+ \4、说明:创建新表) A# N5 B0 j% Y( X6 @
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
$ c" r% f, w1 n$ R2 x7 O根据已有的表创建新表:
; w p; F1 u1 j( C' _+ QA:create table tab_new like tab_old (使用旧表创建新表)
$ V1 f/ k5 r: M+ U/ PB:create table tab_new as select col1,col2… from tab_old definition only. M- m0 v4 q# B/ S$ r
5、说明:删除新表2 I) X% U v Z) l
drop table tabname) L" G" [) }0 v
6、说明:增加一个列- h2 M; O; z' r+ a6 O% d
Alter table tabname add column col type
4 v5 t2 C7 D3 U4 w& v注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。' G& ?4 N' t: U3 |9 b. {2 g5 Q
7、说明:添加主键: Alter table tabname add primary key(col)5 m9 x9 X8 X7 R7 O/ [% G
说明:删除主键: Alter table tabname drop primary key(col)( x* L7 R- W3 h% K
8、说明:创建索引:create [unique] index idxname on tabname(col….)- W; E. O4 B; K7 E K5 e8 Z4 T
删除索引:drop index idxname
7 c( W% E, s# Q( A: n9 v5 i% d注:索引是不可更改的,想更改必须删除重新建。% U7 d4 n" ^. N( v( Q
9、说明:创建视图:create view viewname as select statement
, p5 L3 Y. w! c, q删除视图:drop view viewname4 I" Q! L: y: T( U' {( z( I
10、说明:几个简单的基本的sql语句
% s& H8 C; z: f# Z5 J# B- Y* X选择:select * from table1 where 范围
4 V# s2 ~ m, E3 [插入:insert into table1(field1,field2) values(value1,value2) t/ Q. [3 W/ z) e7 T* O4 R
删除:delete from table1 where 范围1 h) H7 V4 m& q
更新:update table1 set field1=value1 where 范围% R7 Q5 R+ ^3 |9 I, }
查找:select * from table1 where field1 like ’%value1__’
1 [ l7 i: r: O4 \! V0 P: P排序:select * from table1 order by field1,field2 [desc]
; ]6 F9 m! O2 u) W总数:select count * as totalcount from table1
5 U* K% j9 T- L9 r求和:select sum(field1) as sumvalue from table17 g4 n- J' L& ~' u+ f/ _
平均:select avg(field1) as avgvalue from table1
) H- P' T* ?+ L( D# ^0 w! w) U, s最大:select max(field1) as maxvalue from table1: q3 F; y- H1 }! K
最小:select min(field1) as minvalue from table1, I4 Y k7 a, _8 j @
11、说明:几个高级查询运算词! H& {. u/ P! x$ z ?( j* g6 W
A: UNION 运算符6 d7 [, o. z1 d }# d
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
: w# U. q7 j5 s4 G! X2 N$ m+ CB: EXCEPT 运算符
/ U/ N2 A4 f. ?" L8 ^EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
7 B r, b: D$ {3 ^$ }- SC: INTERSECT 运算符
; A, s& V3 M4 D) o0 IINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。9 N% w! A" s; `% L: n9 q* L- b* T
注:使用运算词的几个查询结果行必须是一致的。/ E, [) Z- Y& S) q1 i
5 U0 n/ f) H3 D# x; j6 m3 {12、说明:使用外连接( X( B; l J( J, B! e+ N4 N( _
A、left outer join:
4 } z6 u1 p* {' r& R! Q1 }# \+ l左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。4 m) [! b' K( a6 _1 A* W8 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.c
- r% u; m( T; fB:right outer join:
! v* k) U9 D6 q8 X9 c右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
/ N9 w" w, z% D8 ~# ?C:full outer join:
/ \3 K. h! Z9 I. \. B全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
8 B0 P9 g; F" f, n+ x! d$ `3 \% K* ~) C5 r! {* `9 Z1 j
其次,大家来看一些不错的sql语句/ b% h- Y3 C- J8 I& l% e
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)8 K; V, d; p% r2 y" S! G* A! C
法一:select * into b from a where 1<>18 }& ]% h1 q. L6 G
法二:select top 0 * into b from a+ \! h- w. U% b. U C) n# B& o
5 |/ c! Y( n. }. h
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
( Z6 \% |6 g3 g4 z* u' Binsert into b(a, b, c) select d,e,f from b;- r7 e/ K. o) m3 s
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)) s0 d) {1 v" X) R& B8 a9 k
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件0 P; g( L$ b l; g
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.." D+ @# J- J6 m' |
4 D$ U, T( \% e9 o" n4、说明:子查询(表名1:a 表名2:b)
c) l$ ~" b& 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)) Z& C- s9 n1 o l: Y, v
9 U0 e% ]! `$ m4 v
5、说明:显示文章、提交人和最后回复时间6 q+ ?, P u; c+ t1 B
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
1 j" E* R( a% i& l- d- r
3 \! Q; ~! @; o5 M' ]6、说明:外连接查询(表名1:a 表名2:b)) }# ~& h# _1 {2 U$ G Q! L2 {/ D" q
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
* D i6 { s! w* L' f) ]1 t1 ?& {: f. b8 x1 z! w# S) Z
7、说明:在线视图查询(表名1:a )7 b+ h( `6 d5 f/ r2 g
select * from (Select a,b,c FROM a) T where t.a > 1;" X- ^8 O8 V, o7 c
* c; p% m, ~! }* t& m( m
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
+ _. k B& v- hselect * from table1 where time between time1 and time2/ k' q# \( Y7 f; c
select a,b,c, from table1 where a not between 数值1 and 数值27 r7 O$ f, F0 a4 w
2 n0 z$ h/ r: _/ \9 T$ p3 C8 b7 |9、说明:in 的使用方法# d8 f1 J; F# ~/ q
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
/ X8 d# p& I' G- }5 A
2 q# p8 U1 e F6 b' x10、说明:两张关联表,删除主表中已经在副表中没有的信息4 B6 k3 J% ]2 @! N# }( d7 e
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
6 r1 ]' a8 O9 O5 h4 T, ^; b- e- Y9 ?$ S) e6 ~- Y. i2 C- a/ S
11、说明:四表联查问题:5 q |" M; o Y! [
select * 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 .....
! y+ D* `; P; e: d1 D% x
% w0 A0 {4 s9 n$ J" W12、说明:日程安排提前五分钟提醒
6 X% E% P- q# k- `$ gSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
0 o4 q( f8 P2 {9 ^7 b: J. P, v( c$ b0 \) E+ ]2 q1 P
13、说明:一条sql 语句搞定数据库分页
% q( }+ ~/ M' o7 v/ X, u% zselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段, Q# r5 z3 M4 J3 m
& p4 W/ E$ V6 y. t& a3 S8 |
14、说明:前10条记录6 B; b7 [: ]) n( {1 E) d, ~
select top 10 * from table1 where 范围
; ~) Y* U( v2 C( N2 }5 U; P, U* k; ? m
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
. {: X+ L0 g/ l, f: J" X- F% ?select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)1 `6 x+ C0 f9 I' C% I
\3 E- ?/ R2 \5 q4 b) @6 L+ h, X16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
. x$ Z5 K( t3 g2 S7 U7 W! W# q% `(select a from tableA ) except (select a from tableB) except (select a from tableC)( p2 `' y+ w& d7 T+ P( k- d/ _+ r' h
. i/ k/ J, b9 `
17、说明:随机取出10条数据( K0 x: I! r3 N# z9 P; R
select top 10 * from tablename order by newid()* `9 Z A7 o H" F7 ^! ^9 _0 d
( t1 @- J, g+ L18、说明:随机选择记录7 L2 ^$ ~6 |% ]7 ` i& r" Z* | {* K
select newid()2 Q1 i8 M5 P5 c9 f, \+ {4 E
- N& C3 c ]+ D# B( t! }: z+ h19、说明:删除重复记录: x4 `$ p9 I) w3 ^ c+ {, q
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...); R" S: v$ d+ a
1 M$ H8 [$ S( @, g9 P+ k" @20、说明:列出数据库里所有的表名
$ P! F- `% ~& s6 S3 ^select name from sysobjects where type='U'( Q& X- X5 o5 `4 R7 f" C
) a& B! s- o! ]$ j' I21、说明:列出表里的所有的
+ Q. w. H( u T/ I7 @/ l6 Zselect name from syscolumns where id=object_id('TableName')
# _/ d7 W- \3 u4 A U( ?6 v
! W9 z# [6 S; D6 }1 p( R7 G22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。5 d- B7 j, F+ i
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
+ Y. b8 C6 |1 j" M. N$ R9 M显示结果:
- `( j- p2 B5 e; y( j- n# A4 ttype vender pcs
. D8 a/ C9 N ~9 m2 Q) z5 D6 g$ U电脑 A 1; W! {6 ]- Q" \3 Y
电脑 A 1
) u" [ m' d& O( e光盘 B 2
) R1 \8 X. {& O3 o5 m8 g光盘 A 2
* u# S) H3 c( ^* n& Y7 w手机 B 36 Y* C. \0 @3 k$ v+ w" P
手机 C 3
! n0 X+ ]* t' }/ G5 L( ]# l/ \2 F/ J" C' M- d4 s' N1 L& r6 \. z% T
23、说明:初始化表table1
$ B; \' H* i" hTRUNCATE TABLE table19 E R7 T4 {. l) x N! p2 K
, z& Y; N% T& t- j" G
24、说明:选择从10到15的记录4 b4 p& m) {- \' `9 d4 T7 `
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc |
|