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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:
0 j8 R5 R  t2 u0 Z& r. c5 M; dDDL―数据定义语言(Create,Alter,Drop,DECLARE)
! Q/ l; b8 y4 s3 }% P' DDML―数据操纵语言(Select,Delete,Update,Insert)
; U+ v: E( q( N' i" s% t7 l$ H/ u3 ADCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
; |0 e% ^, `0 F3 W6 a$ L* `1 Y6 D/ I6 v1 A2 f1 ]
首先,简要介绍基础语句:
9 T& I6 i' {) i1 G9 X* }3 q1、说明:创建数据库; U" I. q, R! J: ?% l1 d. ~
Create DATABASE database-name7 w& c: J% c3 M
2、说明:删除数据库
  V& v5 z, H( idrop database dbname
2 y( F  V$ c( g1 F3、说明:备份sql server
6 }: [9 W0 x0 {/ B, y, i7 P1 N1 o--- 创建 备份数据的 device
7 W$ l" k: Z; A! `USE master* l( `; b8 M1 b. l  V* H
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
0 h$ F! I/ l4 ~0 M7 @) G--- 开始 备份
) b' {+ g. p' [3 TBACKUP DATABASE pubs TO testBack
. x/ D2 Q" |7 Z/ Q4、说明:创建新表5 ~* n3 Z5 _7 ~/ i$ j3 Q. d
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)( k' m( C3 w0 w9 ~4 X& n* I
根据已有的表创建新表:
0 J& n2 m1 U0 kA:create table tab_new like tab_old (使用旧表创建新表)! \6 U3 E* `4 \' @0 s
B:create table tab_new as select col1,col2… from tab_old definition only
' @+ M9 ]5 H  h4 U& U' h5、说明:删除新表" L% Z' R6 ^8 M7 d
drop table tabname) D" f  ^7 P4 S/ j6 n# @  J1 T, u
6、说明:增加一个列
6 a1 m7 b: W- i% z, Z/ MAlter table tabname add column col type0 d& R6 j8 _) S( a
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。( y- [  ?, m+ ?) p1 I- L0 K# p, R
7、说明:添加主键: Alter table tabname add primary key(col)8 V1 K/ A8 r. l+ O1 i4 l6 R
说明:删除主键: Alter table tabname drop primary key(col)9 s) Q% m( C/ P+ m
8、说明:创建索引:create [unique] index idxname on tabname(col….)( r: H# u8 |/ a3 t
删除索引:drop index idxname8 e' S7 u( T* M9 D6 `9 v( \3 H
注:索引是不可更改的,想更改必须删除重新建。
$ O5 `. A. i4 g. U' Q; T+ y9、说明:创建视图:create view viewname as select statement
/ p2 h' H  o8 T6 x0 g4 m  |删除视图:drop view viewname
% I4 [, t4 s: v6 M4 {10、说明:几个简单的基本的sql语句
% E. _6 |4 b6 A9 Z. M选择:select * from table1 where 范围0 @9 D& Z% x" Z: w' X5 C" X" i
插入:insert into table1(field1,field2) values(value1,value2)+ U- c+ L( ^- Q, s3 K9 `% A% C3 A
删除:delete from table1 where 范围
. `! I  E3 `+ T" l% A5 f" d; M: U3 ^更新:update table1 set field1=value1 where 范围
+ X- |/ |3 \4 y查找:select * from table1 where field1 like ’%value1__’
: a, C& M$ T' C# G$ ~0 b  x# B排序:select * from table1 order by field1,field2 [desc]7 a0 {! b" |! m; s* ^2 ]
总数:select count * as totalcount from table1# g; n  \5 v: ^* d
求和:select sum(field1) as sumvalue from table14 g; V" i% u$ x8 m0 w, B  D7 P
平均:select avg(field1) as avgvalue from table1" K" x# Y0 L1 p0 q$ I3 h  {/ Q
最大:select max(field1) as maxvalue from table1; O8 D. C* k0 Z4 I- k1 o2 i
最小:select min(field1) as minvalue from table1
( E+ i- T  k* U& O6 p11、说明:几个高级查询运算词8 x, F( D  o6 `( I0 [
A: UNION 运算符6 y4 v; K- |, o
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。2 V5 ]3 r2 t) Z. @& S: ]) P2 \* F" D
B: EXCEPT 运算符
1 i' j: b8 b. S, @! o+ u0 YEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。% J3 x! k6 B( F0 x' y  Z9 O
C: INTERSECT 运算符* \! }, B" R* w5 ~2 O
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。$ K; H) C/ f& M9 a6 |
注:使用运算词的几个查询结果行必须是一致的。2 X4 A" b% D8 D! s+ Y" b) i5 q
4 H2 D4 U9 F7 Z; r4 P& x
12、说明:使用外连接; ?) h  _, H2 q3 E) ]
A、left outer join:
7 d4 K4 k. l8 A. S左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。' c5 u2 f. h% T# @( x
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+ B3 H9 U  ~% x/ B( o3 F; P2 B/ t
B:right outer join:
+ Q4 u, [8 g6 x/ C7 \) k1 F, w& t, q右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。- j+ a+ L! ]4 T, S! H; {! |* X! k+ y
C:full outer join:# \) c+ w! y3 F" v, W/ j# X' }
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。/ G3 y  A; J2 t& ]& x
1 X% H. p6 ?: U* E" w
其次,大家来看一些不错的sql语句
, H+ Z4 ]4 b9 o6 V3 t% G# b8 Q) Q1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
4 q3 R( j0 {1 P法一:select * into b from a where 1<>1
9 g% b' h6 u  F/ ~$ ^8 J' _+ p法二:select top 0 * into b from a
1 [% N9 A8 @' {
7 m' {* H6 o$ S7 x: n2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
3 X( y- b7 H9 P7 Hinsert into b(a, b, c) select d,e,f from b;' i6 t3 o2 J/ S) C! {+ U, L1 ^7 ?
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)8 {+ e& i& [; ~- E
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件2 A) h) |/ s/ q! I2 G; ?/ ^
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..- t& E) H9 S8 ?( l) D6 k& \

0 M% I- G8 [5 }& D( Z: {" s5 k  u4、说明:子查询(表名1:a 表名2:b)
, U5 p; t2 S; {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)0 |9 ^. D* J* k7 k
: ^5 Z# W0 v- [3 o3 E
5、说明:显示文章、提交人和最后回复时间. B  a6 v; ]9 m. p* g
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
( r" \' [# Y1 t7 Q+ T4 P; h+ c  H: ?' O3 R5 d- m1 l
6、说明:外连接查询(表名1:a 表名2:b). J2 P/ s, |. u2 y0 q% }8 \. ~( R& z
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c6 w" H7 n; w* H+ Q: T: W' |
+ g+ Q7 G4 \, Z- K7 ?( x
7、说明:在线视图查询(表名1:a )
$ ^6 `% |7 t8 x& x! rselect * from (Select a,b,c FROM a) T where t.a > 1;
/ f& b) e; T: ?( v2 H
+ R& n+ d( J" o) f  b/ l# h8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
) F( n& u2 B- y/ j" I9 iselect * from table1 where time between time1 and time2- Y6 h; p* q, M: m
select a,b,c, from table1 where a not between 数值1 and 数值23 L! f) o% x- a' T

& C4 p* M8 H2 l0 n1 h- ?0 m. X9、说明:in 的使用方法" w6 p8 s7 V+ Z) N
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)3 e9 F) ~- _, H

& ?8 j2 |$ w8 ?9 W: J. I+ l9 }10、说明:两张关联表,删除主表中已经在副表中没有的信息
7 l; m, l! }) M  f* F8 V: mdelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )8 a' M% H* j1 ]* g

" L# V) y" {- p* D, F+ E1 x$ l11、说明:四表联查问题:
3 }' ~: _9 z: fselect * 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 .....
/ Q; v% L. H8 g8 d0 Y! T. J
1 ^& |2 D6 A( u1 @0 A# n3 U7 c. G% Y12、说明:日程安排提前五分钟提醒  C8 Q. B0 h; @* W3 G9 I2 i
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>50 U1 |# F- {. e7 Q0 e0 ?9 R
0 J. M/ z% H; v0 h$ |6 D$ T$ B( v
13、说明:一条sql 语句搞定数据库分页, O' ?4 h9 @; ]. m( C1 c
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
$ H, c) R* ^6 S  D( N, L1 I# n3 J% y; B# N
14、说明:前10条记录
& o, G* {6 `9 o+ g' s: u" \9 Bselect top 10 * from table1 where 范围, M8 N' M. Y" f: I

: H. J3 x  a' W15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
; c5 k/ Y7 m- p9 q  S8 zselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
! {5 _0 R; c: p* P* b" Z' t3 M) ]7 G
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
* B0 R8 D- x8 n. K( b(select a from tableA ) except (select a from tableB) except (select a from tableC). h! ?: ?! p+ Y/ P
; c. [! b) A4 [5 }6 @
17、说明:随机取出10条数据( s( g6 y2 A2 Z4 _% w$ Z
select top 10 * from tablename order by newid()* |) [) a# G7 c, i' d

( u4 L7 A5 I5 U18、说明:随机选择记录# Y0 d/ R3 M. N) p
select newid()  J9 ?$ A" K3 P4 `
4 `8 Z9 z8 \. |9 d, V. k. H8 A
19、说明:删除重复记录
2 L/ H# I7 j+ y! r) XDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
9 b3 ^0 `& f$ h( {* q9 Q, \& @8 p# S# U  w2 c5 g7 d
20、说明:列出数据库里所有的表名2 _+ S: U$ i( h' T0 D+ A# a
select name from sysobjects where type='U'4 l3 {$ z4 m3 Q- m( ?

& G/ n5 O5 X* j- H! I0 x, L' J21、说明:列出表里的所有的6 @( U0 w) ^* }! q5 t0 K
select name from syscolumns where id=object_id('TableName'): d9 G- E5 o+ Q1 {; G- T
# m2 V  Y2 l8 B2 n
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。4 y5 w9 `: W6 i' c
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  a7 t/ b" q, Z1 c; c4 u
显示结果:7 P) @$ y7 L: j4 S" _  N
type vender pcs
  W4 H. O5 {' ~2 J: i/ a2 a; O电脑 A 1* `* ^4 T; R  q1 C# w8 c
电脑 A 1
. S7 U8 b. W( Y) q* R2 \光盘 B 2
( n; n+ d. u& M光盘 A 22 k8 k+ b: W& J6 T: y. k& D6 R3 H
手机 B 3
: A1 t8 b3 Y1 M" I2 R# l手机 C 3
- d. i0 u1 w5 L1 I5 h
- C: B( j6 Q( {2 d" L23、说明:初始化表table1  i" C) L9 a$ w4 y, L
TRUNCATE TABLE table1! J& S$ K: M9 u% J- }* N4 O
3 @7 V, T1 w% d( ]) F
24、说明:选择从10到15的记录
7 ^! W  {- @! L* D) h- qselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-10-5 04:34 , Processed in 0.023002 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部