航空论坛_航空翻译_民航英语翻译_飞行翻译

 找回密码
 注册
搜索
查看: 1762|回复: 0
打印 上一主题 下一主题

经典MYSQL语句大全 [复制链接]

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:
, {+ }+ Z" f# {3 C5 BDDL―数据定义语言(Create,Alter,Drop,DECLARE)9 f% y* c; Z  M8 L
DML―数据操纵语言(Select,Delete,Update,Insert)
+ \" f. w- F& w7 D: MDCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)+ ^3 r3 k2 F. n

! q6 t7 c8 ?2 t4 Z. u0 `  _首先,简要介绍基础语句:
6 f- ~: [" i2 r! ?* t/ m) ]1、说明:创建数据库3 Z9 f( `: d" ~: m+ M; U+ g
Create DATABASE database-name& p' e) _/ ^( B5 a/ B* E& J9 o
2、说明:删除数据库( \- @* ]1 o  a7 U0 _9 s: [7 I
drop database dbname  ~5 d' y5 `0 t& x8 L! `
3、说明:备份sql server
# C& g/ j* X9 z5 b% a8 g--- 创建 备份数据的 device
1 g- m4 p9 q+ J, XUSE master# U% t+ r2 k( R+ }
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'% G+ P" S& d0 e( A
--- 开始 备份
! \, z. W6 H) vBACKUP DATABASE pubs TO testBack
+ Y" W6 s# C7 ]8 o9 [. q. @4、说明:创建新表/ v5 V- ]* m5 x) W( l
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
+ V7 @6 q' X4 @$ N* x) I根据已有的表创建新表:
; D' d& [5 {/ b8 \A:create table tab_new like tab_old (使用旧表创建新表)
# |5 F  T! k5 A0 jB:create table tab_new as select col1,col2… from tab_old definition only
- Q; U) N( @. w2 T  p& I, h5、说明:删除新表
6 @' p/ V+ K1 W* Y9 Qdrop table tabname! v" p+ X& X$ u  }/ e& V
6、说明:增加一个列
6 C  e3 P0 z# K) zAlter table tabname add column col type
, h# o- |' C2 L注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
( H6 {& s) y: I; ~! p$ r7、说明:添加主键: Alter table tabname add primary key(col)
2 E) E/ U1 @9 Z5 @* ?说明:删除主键: Alter table tabname drop primary key(col)
' q, s+ x/ A0 e2 Q8 _8、说明:创建索引:create [unique] index idxname on tabname(col….)% a; g4 a- e2 {" y( J0 F+ d
删除索引:drop index idxname) Q* U+ X  U1 Q  B1 f
注:索引是不可更改的,想更改必须删除重新建。
: p& j3 k' u: h9 P& I9、说明:创建视图:create view viewname as select statement, m/ v. Z4 x2 q1 V* [8 Q
删除视图:drop view viewname3 ^" c/ [5 z6 ?% L. o) t, r" i
10、说明:几个简单的基本的sql语句
; o6 P. [5 P7 J0 u. z, V" M- J3 }选择:select * from table1 where 范围, K9 T, u* ]4 X2 X3 V+ {6 ]
插入:insert into table1(field1,field2) values(value1,value2)1 K% g* U9 F& Z0 R" i2 ~) V
删除:delete from table1 where 范围2 p9 f4 V( \  O! s" H
更新:update table1 set field1=value1 where 范围
) T) V9 A4 H, ]* j+ d( ?& L查找:select * from table1 where field1 like ’%value1__’
( k& m6 l" x) L! Z排序:select * from table1 order by field1,field2 [desc]" {) v5 f7 e0 s1 e" Y0 m
总数:select count * as totalcount from table1
; U4 [* T0 z' s: B求和:select sum(field1) as sumvalue from table10 r5 e9 X% Z# a  I( v: u
平均:select avg(field1) as avgvalue from table1
$ T9 [# {. `( m5 D最大:select max(field1) as maxvalue from table1
8 R7 f7 t9 F- C% [: @$ |7 ?- ]最小:select min(field1) as minvalue from table1
& _9 @+ C3 f& I' n  I& F11、说明:几个高级查询运算词
& x' Z2 y) e0 {6 c/ NA: UNION 运算符3 k: w/ G. o" s8 l
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
9 ~+ T' ]. r8 R% g  }: H" ^B: EXCEPT 运算符
" B* o$ R8 H: q# \1 AEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
$ ]6 M. r6 M1 E' RC: INTERSECT 运算符
; E$ T$ S) ^- q, k* N4 Q+ X& eINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
5 ?0 }. k' {0 U4 e! r' A1 d# s注:使用运算词的几个查询结果行必须是一致的。
! G+ z+ c. h$ ^' }
1 q3 I% f; a: X- M  x' u/ k5 v12、说明:使用外连接* R& {. t5 x( V3 P; u' E: E
A、left outer join:
# A; o( j4 Z7 ^0 W5 o' D- i左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
$ ?' P* R6 D3 D6 b: C& n( h" a( WSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
: T. ]2 D# U( l' H5 |) |4 NB:right outer join:
/ |/ K7 _, f! {% C右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。! z5 B. }% ]; ]/ X
C:full outer join:
3 o0 a8 n& m! i1 q( W8 {. x  n, [全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
1 C) \6 T6 T* I7 D6 d2 }3 t& W' {6 c( G! d& j$ r2 ?
其次,大家来看一些不错的sql语句
  O! T- ]" V% X- d1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)0 e: Z5 _) V; |& q
法一:select * into b from a where 1<>1
+ t$ v" Y: |# e" z; f法二:select top 0 * into b from a2 v1 c  X6 S, y& i# K

8 @- L( Q" ^: o+ Z4 {& T2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
+ C8 _* W' ?* J$ ]/ dinsert into b(a, b, c) select d,e,f from b;6 q( v' ^% E3 f
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)! n# I" h7 F$ T6 S7 Y; x7 L
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件" @) ^/ ~, ^; r- U, \
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..: Q4 D, |0 k! X( m$ F6 [7 m
1 h4 m4 O) L' v5 [5 @
4、说明:子查询(表名1:a 表名2:b)9 ^: E$ A1 D; S! k! m' x
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)
# P! e7 h! Z+ ]2 r9 ?# W0 x
! A& L( Q, g2 e5、说明:显示文章、提交人和最后回复时间
' s, V: ]* D/ M" t! oselect a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6 o  X& c, a% o4 i
3 @+ |- T( K! K6 m/ B6、说明:外连接查询(表名1:a 表名2:b)
2 Z( j) _' v2 B4 s4 ]select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
$ ?" }& g  H7 ]
3 S4 e9 F* r7 a$ r0 p0 j3 w9 q; R7、说明:在线视图查询(表名1:a )
* Q8 b% Q9 x) Xselect * from (Select a,b,c FROM a) T where t.a > 1;* O# c; a2 N. q: W

8 K8 V1 v3 X* I  ~0 \; o6 ^* G8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
+ M2 t3 f% {0 _% ]6 T- k# Gselect * from table1 where time between time1 and time28 z2 y& J$ S8 a5 T* s
select a,b,c, from table1 where a not between 数值1 and 数值29 s( G, {) h0 H& c% J

5 R+ ?. A& a. [' \% A9、说明:in 的使用方法) `) H7 I+ X: B. x7 ^9 M( S( X- @! j! I
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
: {, m* |6 F/ u) U; ]0 V
/ `( s! \8 A5 R( h7 p/ i7 e# {  G0 v10、说明:两张关联表,删除主表中已经在副表中没有的信息
9 e) e4 F& A/ O" z; T* [1 D1 Ddelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ), R  s6 |1 y0 f4 ~4 h! j

5 i$ [% M0 R) R) C/ @11、说明:四表联查问题:
0 d* c$ }0 V) \9 `( Tselect * 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 .....
8 K' m# D0 a( `3 M
; |' ~- L: Y8 Z" n' r1 ~! \12、说明:日程安排提前五分钟提醒: I+ x, ?6 y3 i, ~
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5+ d- c8 `* F# F1 N! D
/ Q& o" E3 n* ~, d; G% O. a7 R
13、说明:一条sql 语句搞定数据库分页4 ~" r- S3 M: t( H
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段, ?# V( G/ ^3 E: Z2 y& T
  [6 t+ o; c7 s! i+ Q9 ~4 v$ w
14、说明:前10条记录5 p, H' R, Q9 V3 |! l& X
select top 10 * from table1 where 范围
* Q% d6 t1 s# h, Y9 {4 ^0 A. Y+ H$ J+ x  T- o
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
( Z  D' X% E6 X( W" N0 Sselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)0 K2 e8 t; R1 S' n% y* H' Z
0 r9 ]' ~  S7 z, Y7 E
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
6 W: i* ]; ^& l; F+ A" i(select a from tableA ) except (select a from tableB) except (select a from tableC)
( @3 B1 C' z% Y1 @  I" @9 x4 a
9 p) c- o* q. `1 I% c( b17、说明:随机取出10条数据% h- n* A  e# M; C9 l2 I! [
select top 10 * from tablename order by newid()
+ x+ {- u) ?, i2 `( D+ M1 Q$ q; N! \- A
18、说明:随机选择记录$ Y# t0 U2 B, K6 g$ Y4 N, E
select newid(), p! E  o& c$ U6 l6 W
' A. u7 `. x) g  I6 f
19、说明:删除重复记录3 s: }$ h( K9 F
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)' f& O- ]) l8 G/ B

: {/ D$ _. I. m6 J9 i, v" {0 r20、说明:列出数据库里所有的表名" L- U- k, I" b# r! Q5 N
select name from sysobjects where type='U'; V  e! S5 s. W' a7 [, Z
5 Y: t- f  w& |* F% J' v
21、说明:列出表里的所有的
0 `1 d' h; n5 f  I" eselect name from syscolumns where id=object_id('TableName')
4 N/ o/ \8 P+ S. G
9 p1 F$ ]  @8 [( j# T+ U( u22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。/ W- \8 t% a" o. @
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
0 w# L7 f7 o! p% l6 i显示结果:- e' \& f: q; e7 x
type vender pcs
+ r9 n1 h" x1 y$ Y电脑 A 1
( V9 `8 M8 v4 k7 s电脑 A 1
/ G; m1 t( I% U) d8 [# f光盘 B 2
# c: y6 {, S" j5 ~7 ]/ e4 w( a% Y( o光盘 A 2+ B8 ], K4 t# S! j
手机 B 3. v( \1 o0 |2 |: x
手机 C 3% X1 i4 r3 t  [3 Y. Z! }5 ^6 f

& i2 n& s' i8 b* b23、说明:初始化表table1- |8 N' q& Y- D7 F, Z* L7 c! d; ^5 v  ^
TRUNCATE TABLE table1/ _2 j! [' r% \/ K
1 p; m' C/ s' q0 i/ q- J# G# {. U1 L* c- l
24、说明:选择从10到15的记录
# W- c0 p- {9 N5 c$ Zselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


Archiver|航空论坛 ( 渝ICP备10008336号 )

GMT+8, 2025-11-18 07:22 , Processed in 0.022002 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部