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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:. R& C7 s  t0 h0 S: D6 e
DDL―数据定义语言(Create,Alter,Drop,DECLARE)  |7 \4 O4 W8 ]' N) p4 P
DML―数据操纵语言(Select,Delete,Update,Insert)
4 u. V# P0 O6 p4 oDCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK): @% f6 N2 ^7 B
" s& t* L! p, t
首先,简要介绍基础语句:9 u( \, @& b% E1 w) o: K
1、说明:创建数据库
4 C/ [5 s( R7 LCreate DATABASE database-name' C; i$ h* \+ d
2、说明:删除数据库
+ c! k0 G, [/ O) ~" h( Pdrop database dbname
3 D, }2 U8 k* P/ f9 \3 W$ c* L3、说明:备份sql server
' s! F& f2 ?9 \. K  ]--- 创建 备份数据的 device
' o# V6 ?* l! QUSE master, ^) u8 _# C# L/ R6 r8 X" h
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
1 ^8 X) o9 d2 W) m--- 开始 备份& i% k2 s4 R, g$ w
BACKUP DATABASE pubs TO testBack/ w1 e- U* b" {& C1 F
4、说明:创建新表9 z' D7 c8 a8 f" [) P" x* @
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)' s9 X( R. N: U" v( k+ Y5 }9 e
根据已有的表创建新表:
& y  W4 j$ P; x( {, ^A:create table tab_new like tab_old (使用旧表创建新表)3 w1 f0 ~* D$ c+ {
B:create table tab_new as select col1,col2… from tab_old definition only
; `% ^- P, q- |% }5、说明:删除新表7 X( \7 f& r9 q/ c: ]" w; Y
drop table tabname7 B7 R/ H; K7 L" I
6、说明:增加一个列
/ a' m) K* D* c$ z  C3 `Alter table tabname add column col type
/ _7 M  h. n% p3 I* N( @注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。; V6 c+ r  P' c) H( ]
7、说明:添加主键: Alter table tabname add primary key(col)" K8 t+ |9 @4 f- f2 P$ M
说明:删除主键: Alter table tabname drop primary key(col)) {' G& k7 B  d% `# a6 |
8、说明:创建索引:create [unique] index idxname on tabname(col….)
, k9 l7 y* O  t" w删除索引:drop index idxname
7 Z: `2 n% ?" i! p注:索引是不可更改的,想更改必须删除重新建。
* V) L5 N* s8 _5 ]0 B; q9、说明:创建视图:create view viewname as select statement# t+ k: s1 N+ G+ c
删除视图:drop view viewname
6 j) R, n+ s, V  E$ k- I3 F3 r! ^10、说明:几个简单的基本的sql语句
- V5 y$ _! f+ ~选择:select * from table1 where 范围2 a1 ~3 ^3 X- q0 |1 L( [
插入:insert into table1(field1,field2) values(value1,value2)( Q/ c3 \2 d! p" B( e. i
删除:delete from table1 where 范围, O2 F6 b  G2 y7 L# t
更新:update table1 set field1=value1 where 范围
) l) \( H$ [- C查找:select * from table1 where field1 like ’%value1__’ * m. Z6 ?1 B+ j; D
排序:select * from table1 order by field1,field2 [desc]6 w% Y  A9 ]) u$ F
总数:select count * as totalcount from table1
+ ^  C2 Q2 y2 ^求和:select sum(field1) as sumvalue from table1* _; t% T+ l- W! J7 j# K, a2 y7 o
平均:select avg(field1) as avgvalue from table1
3 a! P8 ]; l: ^1 P5 m8 R8 G, [最大:select max(field1) as maxvalue from table1
0 _( O* V+ s! x6 C最小:select min(field1) as minvalue from table1
4 n# S( i# g8 Y8 m) V11、说明:几个高级查询运算词
8 r% k! M& u- S; n* w6 R- SA: UNION 运算符
: c: N+ j  _' c  X/ d7 F5 ~* ~UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。& O9 o: H* k2 j
B: EXCEPT 运算符& \# c. a* ~3 d8 T
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。  c# Q! o, t, B7 N8 S( @. r5 H5 ^
C: INTERSECT 运算符
1 R4 m" g8 Q2 P4 NINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
$ @4 X6 ], k0 }$ U注:使用运算词的几个查询结果行必须是一致的。
0 M' J8 P/ T% t  C- W7 K
0 z3 f  D( i. J. u12、说明:使用外连接7 H3 `4 X' L1 Y$ }6 |/ b
A、left outer join:6 D7 _! E+ R6 w% a* ~" K* V
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
* _  k; o% T! K+ X1 E8 mSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c. ^3 L4 S' v; P& f8 h
B:right outer join:
* R9 t5 i- k8 F6 K右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。2 K; h+ O2 @) a' R$ ~. H1 b/ D/ W7 |
C:full outer join:! a6 r7 K5 I5 c; v% O& l4 @# G
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。6 m9 S4 s/ A- S& a/ f$ }9 q' G

7 G  Z. G: K, r其次,大家来看一些不错的sql语句, I$ H- _! `* D' T2 p' |. w! l
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
( p. F4 p& ~2 _$ t+ S5 N" [5 n法一:select * into b from a where 1<>1
, J1 k. U' g. W8 T1 T法二:select top 0 * into b from a+ i/ V$ H+ ^- C% n/ f4 h6 E( {0 S
5 l9 _) B5 V' r! s3 m
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
7 q! ~+ {/ @" A5 oinsert into b(a, b, c) select d,e,f from b;
/ E2 v. L' o2 i2 u, w% h3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
8 p; S" i) ^  @insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件% R5 P. M% J) s# a1 f( v. ~
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
# v' q1 q( H# Q( X
$ U( t+ P0 ^, U4、说明:子查询(表名1:a 表名2:b)
( Q7 o# V: @# [5 h5 n( h) Wselect 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 {2 u$ p) b' j# y0 d
* c1 X2 ]# s* d, Z$ |4 J3 q5、说明:显示文章、提交人和最后回复时间
1 p9 y) y( X2 _- qselect a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b, f- w2 o: |9 z- W' p+ T2 ~& m

% J: ]3 d& L, C  K. E: H6、说明:外连接查询(表名1:a 表名2:b)# G( y: T( R9 Y+ P* b& |
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
9 n; B; Q- \8 O! o# M7 E" [+ ?5 j
3 R# @3 J" x; Q4 t! A0 K5 }7、说明:在线视图查询(表名1:a ), X9 g+ x3 ~+ g0 X- s
select * from (Select a,b,c FROM a) T where t.a > 1;
' v7 \: A; _6 @' G
/ O/ {2 x  |* }& t. ?) p# Q8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括7 ]- l/ h* c) K% o! n
select * from table1 where time between time1 and time2! y* a& [! F$ W' ]6 \3 m* O
select a,b,c, from table1 where a not between 数值1 and 数值2
" i, I3 r" S1 h3 C
4 h/ X1 ?+ S$ O2 k7 x$ t  \9、说明:in 的使用方法
, ?. r% X# k9 P  dselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)1 C( C5 a" O- R

, N, v, j% F( u/ r10、说明:两张关联表,删除主表中已经在副表中没有的信息
& K4 I1 W( l  q  Kdelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )" h0 R0 ~- y& U! e8 U/ f

5 u# `1 [8 l' L( ~) l" r11、说明:四表联查问题:9 Y: [1 c$ d# A. {5 s7 F
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 .....
: A. o7 ^" h! x( I9 p+ v$ ^2 b+ F* l* q  x2 ^0 |8 P
12、说明:日程安排提前五分钟提醒
9 u- o/ m+ \! M5 mSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
! l) ]- N: q& y+ h* Y! Z; Q4 N* X0 C' U% Y- Y% ^2 O
13、说明:一条sql 语句搞定数据库分页
2 w" o/ Z5 F+ L. @5 Jselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段" s% Y, ^: i3 }+ ]

5 Q) a6 F9 @* `# I+ _14、说明:前10条记录* n& V* x- b# Y" `! j, J* S# U
select top 10 * from table1 where 范围
2 S% Y& y% k1 r; d" E( q$ I; h! f3 _; S, Q0 p8 W1 ?/ K
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)& x4 d, Q0 _! v4 a/ \
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b); b( V5 m! L* r+ X8 V/ e3 C+ d) A

, m1 I7 U6 x: o# @% X% Q16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表( _2 i8 Y* I! s1 I8 }
(select a from tableA ) except (select a from tableB) except (select a from tableC)4 ]1 `( p# d) b* K! t0 ?8 P

; m# m: c8 w4 @17、说明:随机取出10条数据& V! i: y: T# |; S1 u
select top 10 * from tablename order by newid()
. M9 k3 B" x1 P% a- Z  k6 `& O, z6 S$ U6 k  R" d
18、说明:随机选择记录1 e! E$ B" x5 Y$ \; g# o# h
select newid()+ ^  R% V. d+ g  l5 o

5 U  [: l4 c1 t2 r9 B- z- [19、说明:删除重复记录
, x# O+ c. Z) L& A, Q# e$ S- eDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...)/ l8 f/ Q5 \. P( n. H
9 y0 c( D( g( T2 {+ \7 _! _3 c
20、说明:列出数据库里所有的表名3 j8 I! X5 [: j' I0 m' ]
select name from sysobjects where type='U'
5 n* s0 _" E4 ]/ g* m- F, i* o( ?) p
21、说明:列出表里的所有的' J- M4 G7 M2 U3 t
select name from syscolumns where id=object_id('TableName')$ \5 Y; @8 V  d8 k& k* ]
8 f$ j1 L3 S! ?0 u$ u4 m4 E4 G0 a4 @
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。( j. S3 K- w2 F4 }7 d& u8 q! X
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! T3 j2 S: n* [% g6 X5 [
显示结果:% Q. Q* F; u& u4 A  u1 P
type vender pcs. x* v. l" h  |$ g
电脑 A 1% q7 S0 J" |: T1 i- l2 N) a: R
电脑 A 1
1 X5 k$ [! P# b光盘 B 2. h5 e8 C9 i( S& `
光盘 A 2
. ?: Z  o1 }1 @$ Q3 I2 [手机 B 3
0 I6 s4 f+ a% F$ L8 ?5 A7 I手机 C 3( p( M) ^( P4 |3 C! h& u* p
$ |! n+ E0 ?/ ?& [1 Z9 o
23、说明:初始化表table13 V5 D0 U7 [# a5 r
TRUNCATE TABLE table1
- O4 f9 u( \2 C# b& k! o
5 N6 q# A4 B" G+ U24、说明:选择从10到15的记录
' ]% f2 h, U  i* L5 T! Y6 vselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-12-15 13:35 , Processed in 0.024001 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部