- 注册时间
- 2008-9-13
- 最后登录
- 1970-1-1
- 在线时间
- 0 小时
- 阅读权限
- 200
- 积分
- 0
- 帖子
- 24482
- 精华
- 4
- UID
- 9
  
|
SQL分类:
' Y7 y( z2 b9 y% Z: D4 eDDL―数据定义语言(Create,Alter,Drop,DECLARE)
0 @7 A1 J# Y: K. e: q d0 {2 BDML―数据操纵语言(Select,Delete,Update,Insert)6 k* y8 n7 y+ C2 U" `6 |# L7 J
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)/ @" r N% X9 @
+ t% ]+ |8 U4 B& Z$ e; b
首先,简要介绍基础语句:
$ i n# _4 I, ?. M/ L1、说明:创建数据库' N3 k2 L+ ]1 Q4 x- X
Create DATABASE database-name7 y1 y, l( P/ ^
2、说明:删除数据库
5 x9 o- b* `8 @, D X! udrop database dbname$ a3 y. m3 x$ ~1 ` m+ Q8 u0 S
3、说明:备份sql server/ A5 h5 H1 @& E# g% \8 S+ F
--- 创建 备份数据的 device* l, w; u6 u4 ~- D B9 R1 M! c
USE master$ x0 z" }. W/ L$ m1 T# v
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
6 v4 T, I7 z9 u3 b; x3 H \--- 开始 备份2 K2 K9 o2 B& c- @1 U
BACKUP DATABASE pubs TO testBack
7 k4 U6 U3 ]; z; M: v4、说明:创建新表
, ?1 B% i1 v2 v# u% p7 d# o$ hcreate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)/ v( h6 u) @; V0 @0 C/ D* e$ k
根据已有的表创建新表:
+ F9 i' r) ~; k* Q$ {: V' YA:create table tab_new like tab_old (使用旧表创建新表)4 U/ }; Z1 U) S4 i# H* z2 f6 r( ^7 b, d) @
B:create table tab_new as select col1,col2… from tab_old definition only
% T6 U& d/ k- u5、说明:删除新表
* o, w) S* U# d) d: c8 Ldrop table tabname% d4 U3 y! E) ~9 h" w- \1 r: o
6、说明:增加一个列% A% ^% y6 X r. B: {9 B
Alter table tabname add column col type y9 N1 d/ L# `8 Z$ @. t9 T, O
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。/ Y1 d9 a/ d" R+ Q1 C( E! e
7、说明:添加主键: Alter table tabname add primary key(col)2 V5 d Q9 q* U" O' ?& r
说明:删除主键: Alter table tabname drop primary key(col). V: M) ~8 {, S' e
8、说明:创建索引:create [unique] index idxname on tabname(col….)
' Y ?2 b9 z2 r' z删除索引:drop index idxname
3 c$ l, f3 P+ s0 x3 V注:索引是不可更改的,想更改必须删除重新建。3 S0 _( _! ^: M
9、说明:创建视图:create view viewname as select statement
5 J# U7 H% p8 b) B9 G, [删除视图:drop view viewname2 F z3 a0 `) O0 Y; E1 J( C
10、说明:几个简单的基本的sql语句2 f' S( X& P/ a
选择:select * from table1 where 范围
# Z0 m' g. v6 `$ L$ ]" C1 \$ Z1 O插入:insert into table1(field1,field2) values(value1,value2). ]+ T, V8 N* H
删除:delete from table1 where 范围
; Y. g6 v& A1 Z3 m/ f+ f& C4 j4 C更新:update table1 set field1=value1 where 范围
1 w& M" W4 k% U查找:select * from table1 where field1 like ’%value1__’
; G6 i8 Q! [, C8 [排序:select * from table1 order by field1,field2 [desc]5 s7 Q8 ]6 r! ` W; s$ o
总数:select count * as totalcount from table13 ? V8 N5 o. A' s" M
求和:select sum(field1) as sumvalue from table1& }0 G0 b/ c7 g1 {7 A
平均:select avg(field1) as avgvalue from table1
' t6 n) d8 h3 b5 }最大:select max(field1) as maxvalue from table11 i* w) r8 O0 x# A0 n8 s; x
最小:select min(field1) as minvalue from table1
& v( r# ?* W1 @2 y1 y" C11、说明:几个高级查询运算词/ F' f6 p$ p3 r8 M6 c
A: UNION 运算符. X) @4 D8 d+ F1 p; h: e
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。, B* j, v3 j+ Q/ T- O
B: EXCEPT 运算符
; e0 z6 R+ ?7 F1 p% ^' v9 M- Y2 aEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
8 i+ Q Z) I7 Z& c! sC: INTERSECT 运算符
- @- ?7 q4 u. m3 T# s1 \' W! P" eINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。: y- ?, D7 h" F8 W& M
注:使用运算词的几个查询结果行必须是一致的。 r+ e8 e; N5 B
$ O5 c- z; y/ \: j' L12、说明:使用外连接: E( z# c1 u8 E9 w) F- V- ?9 i* u- j! u
A、left outer join:
6 z( z, M0 ~/ g. s2 S9 Q左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
) ~3 U4 j1 i' g- n6 ASQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c8 S4 e7 J4 f) X" w* F& E
B:right outer join:
/ I9 m7 J" j1 ]右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
/ A% R$ F7 [' t* _, SC:full outer join:: p0 g Z, }+ u' R5 e. l8 j+ B
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。2 J& o. V8 E( S
+ N' Y* I: H6 b0 h' ^
其次,大家来看一些不错的sql语句
7 n+ n' n B o& v3 n* l7 i1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)* l' l, S8 d' D: F
法一:select * into b from a where 1<>1
2 E8 r( y& Q$ z- b+ W1 Q法二:select top 0 * into b from a
7 D* |" |' Z- E7 r" `; N- j7 W, c I, R' w6 y! D8 G' ~
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
5 I5 w* p! r. l' l# f; b& _insert into b(a, b, c) select d,e,f from b;( G% X8 ^, q) n: S- Q' ~
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
! `( c1 T7 z8 ]! S% v! Pinsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件' [' c( k& y8 A* u; X2 Z8 d2 C
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
2 C) [# Y* J; G8 h2 r L
; k! D& g0 s5 l# N- G: W4、说明:子查询(表名1:a 表名2:b)
% h W+ W& _- xselect a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)1 R$ f; ~! O8 E
7 f4 D9 s6 U: F
5、说明:显示文章、提交人和最后回复时间
9 ~ u. H% F' B6 S& ~select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
1 U9 a; L6 i; H- H# h4 @. d. Q! g" }4 r3 ]
6、说明:外连接查询(表名1:a 表名2:b)
2 k( c/ `4 p& }. \. k4 a' I2 H. Y! jselect a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
, e6 ^% H. m8 P/ t; m3 I4 c- g* i( t2 O$ V
7、说明:在线视图查询(表名1:a )9 |- P7 G6 S$ m) W% n
select * from (Select a,b,c FROM a) T where t.a > 1;4 Z3 z, t/ H D) B1 y
, Z- ^5 c, r& {8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括+ P7 Z/ ~7 d6 x
select * from table1 where time between time1 and time2
( `$ X1 ?4 I8 g( Q, F, gselect a,b,c, from table1 where a not between 数值1 and 数值22 u" n3 w; h0 I: s; {9 ^' s
' f: H3 ?( D2 h5 }7 {3 T9、说明:in 的使用方法: d6 U* ?& M2 W2 b9 ^
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)# ]' t7 _ b5 L7 _
2 q" l! ?7 m2 a O5 ^( u; |10、说明:两张关联表,删除主表中已经在副表中没有的信息
( y# C7 o/ {: udelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
0 k# Y {7 w8 p5 U# M6 i0 C. Y0 m$ L
11、说明:四表联查问题:$ q2 ^' h" O( ^7 m
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 .....2 Y7 f: }8 T' K8 ]* _ R
! h3 H/ i# B. R0 j- D
12、说明:日程安排提前五分钟提醒- p/ l9 v) f4 _
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>54 }% Z# B4 u0 S0 ~3 B* z2 O& z
5 @/ }1 s3 M. c3 ]! q O13、说明:一条sql 语句搞定数据库分页, N* K! O5 I% m
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
+ m! v$ N5 x# ~. I' w2 w. [: R) P s5 r# G+ r
14、说明:前10条记录) U+ j8 n9 m8 i; |5 i% D" U( }
select top 10 * from table1 where 范围
# _" l. V7 T, a4 h/ e/ m: K8 X i
2 `3 x' ]7 t3 `+ C) [15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
r% Y8 _3 X* V7 G9 e Dselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
1 t' x% A; W; i2 p
: m% t |8 }1 c- I, U! E$ p16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
0 C$ l4 Y/ X' M& N; C" S(select a from tableA ) except (select a from tableB) except (select a from tableC)/ g. J4 f* p1 N: E, Q
, _6 s; Q; i7 F- ?/ J2 k, W
17、说明:随机取出10条数据5 J9 P9 I" S7 U; Q [3 w
select top 10 * from tablename order by newid()
/ y$ ?2 u0 @' o! P: |
8 t# w# P3 R# P* L+ N0 K" Z18、说明:随机选择记录
1 C+ p; C% t9 cselect newid()
( V# l% c0 F7 N K X3 H$ E9 O/ T) D3 Y5 f% c
19、说明:删除重复记录
) D9 D6 w- O+ X4 \" DDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...)& | J$ \9 `' J+ C& ~' f% B
4 n6 C* G z& V2 k; e' k20、说明:列出数据库里所有的表名& |9 {2 l8 t" y- ^1 K( |/ F
select name from sysobjects where type='U'9 a. X- X! t1 Y) Q. |3 M3 y0 H: o. q
. L1 k+ H9 Q6 l3 A, Q21、说明:列出表里的所有的. K' M7 W4 e2 k0 f- G. G7 U
select name from syscolumns where id=object_id('TableName')
! q& g& S4 ]* H( w5 \" |( {/ y
' ~2 x) T1 l L/ P, P4 }+ |22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
# E( G3 S: R) j6 xselect 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
/ o! W$ s2 a5 h" ~7 t显示结果:+ ~" u+ I& b3 X$ c( D' Y
type vender pcs
. a1 I8 A: H# [/ q" [6 ?电脑 A 1
5 J- d+ `/ g9 r M1 T电脑 A 1
/ V2 j! U: S$ D" y1 x光盘 B 2
+ |5 _- B* Z5 f3 \1 X& L6 x3 |光盘 A 2
. T R0 {( @1 _ N' T' H手机 B 35 i% a" r; s7 B4 F- j
手机 C 3
, L4 }1 E# |9 |# @% J9 n! [& X' C3 X# H7 T4 U& J
23、说明:初始化表table1, w1 a6 w% W2 |+ B" @
TRUNCATE TABLE table1
$ o1 k9 c- n( @" a" M; m% X R) A7 A' z2 }! C( j
24、说明:选择从10到15的记录
- a& q. V$ G0 u, f& G4 zselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc |
|