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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:
0 _+ @% L. D- d6 ^/ t  w6 `% z9 @5 {DDL―数据定义语言(Create,Alter,Drop,DECLARE)
( R5 j* T1 N' `8 l6 `, w3 f: a, oDML―数据操纵语言(Select,Delete,Update,Insert)
1 m% m9 Z$ `( x3 f, Y; V$ e! T3 MDCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)3 G8 P1 U5 m' @3 R  d

& q- J9 r- O8 B首先,简要介绍基础语句:% o- K8 J% d6 n. ]" M3 ]/ P; @( q
1、说明:创建数据库8 c+ p" ?7 i8 |: h0 @5 A  f
Create DATABASE database-name
2 ~/ H8 h# w' P2、说明:删除数据库0 [) R6 J  r' s
drop database dbname& a5 j" ~4 G# l0 [4 I
3、说明:备份sql server
9 r' f# x# b0 @9 k--- 创建 备份数据的 device' U" A. T/ n) \1 n# A; m& o
USE master/ b5 f; |* R3 l% j
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
; q7 D- p0 f0 ]--- 开始 备份- D  D# C- b' z( k' |  @
BACKUP DATABASE pubs TO testBack
2 W4 g! ]# m7 q( X+ ~4、说明:创建新表
# ]2 \7 K4 x/ s/ F* f$ H" Z  {4 h& S. kcreate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
% K4 q. L6 |0 k) P根据已有的表创建新表:& B7 |$ r) G* h, B0 p. I! c
A:create table tab_new like tab_old (使用旧表创建新表)
4 d& z+ R; g1 z6 |* rB:create table tab_new as select col1,col2… from tab_old definition only& V: w/ T$ n' i  V8 b
5、说明:删除新表! m' y0 r; {+ Q* ~8 D9 s
drop table tabname
2 ^/ [3 w/ `- T9 H9 T6、说明:增加一个列
8 x7 }5 q- R/ |Alter table tabname add column col type
1 c6 }6 j3 [( M% _; }注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。3 x2 G% i# V6 \2 D
7、说明:添加主键: Alter table tabname add primary key(col)1 K  k" t) I3 t5 D, D+ x
说明:删除主键: Alter table tabname drop primary key(col)8 L! S6 A9 @" G
8、说明:创建索引:create [unique] index idxname on tabname(col….)
  R0 F+ ?: ^( ^  x& M2 d9 n删除索引:drop index idxname
/ w/ Z' p# U9 s注:索引是不可更改的,想更改必须删除重新建。( O7 H8 E" g7 f' [4 e
9、说明:创建视图:create view viewname as select statement
2 W3 x9 w$ X* O( ~: I删除视图:drop view viewname
) K5 a9 m  W8 ^1 q! q- Z6 o$ g9 B10、说明:几个简单的基本的sql语句
1 \5 f8 G! w3 V; W5 x) Q4 e选择:select * from table1 where 范围1 T; @. s( j- C. I
插入:insert into table1(field1,field2) values(value1,value2); m  P  c0 @$ m' `
删除:delete from table1 where 范围0 t" k7 {4 D1 l  L
更新:update table1 set field1=value1 where 范围  ?* ~$ _' l0 p6 a1 d
查找:select * from table1 where field1 like ’%value1__’
8 y: E4 }8 w* ~3 i) j! |; g排序:select * from table1 order by field1,field2 [desc]
& q1 ]1 C# `6 \  K; ?总数:select count * as totalcount from table12 z2 C/ F) _0 _. g
求和:select sum(field1) as sumvalue from table1
' g* U: i+ B  q4 r平均:select avg(field1) as avgvalue from table1% @2 S$ e; \5 _$ _+ V$ X
最大:select max(field1) as maxvalue from table1
: r4 Y( L0 M, s4 q2 \' f$ r最小:select min(field1) as minvalue from table1/ D: Y; r: N" y* Y, ^5 j
11、说明:几个高级查询运算词0 {: o5 e7 b  \/ W' h
A: UNION 运算符
( g' _9 k5 ^, Y- [3 r% G* vUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
3 d" H7 R  n# g+ uB: EXCEPT 运算符
% x! U3 o/ w' KEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
5 S0 X7 g! D$ e) N% xC: INTERSECT 运算符
2 B# Z5 }7 C  N. L$ P* n7 |0 hINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
9 T! b5 B1 f0 w3 ]注:使用运算词的几个查询结果行必须是一致的。
+ i& ~3 i( y/ @/ y% ]; ]& s4 s- O) b- F) o: {! C) J
12、说明:使用外连接- Y+ I, x( f2 S9 P  h+ M
A、left outer join:
* ^9 ]; O$ }/ g) ?) B4 n5 A左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
* W& j9 Y# R% M+ {9 \SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c8 E# F8 F# y- y. |- S0 J/ I  Z5 f
B:right outer join:
7 {, w. K+ s3 O/ E# h2 l右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
! l; m8 w6 B2 y% iC:full outer join:
; b! I) Z  v! R+ ]2 H0 c全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。/ Y) E  E: f9 ~) Q; M9 Y/ G
3 F4 r7 x" X7 Q- T1 L: G0 H
其次,大家来看一些不错的sql语句
2 {2 l( l8 l& c1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
! ^9 ^! z3 x; |% }法一:select * into b from a where 1<>1
: g& f* F0 S0 O$ X% Q: m  P5 m6 _* z法二:select top 0 * into b from a
% C, \8 u3 U  _
: ]* H0 a  c3 w7 X2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)" L( E. n% i2 l- j% I
insert into b(a, b, c) select d,e,f from b;" @6 d2 F9 C4 {; v  s7 y4 l4 @# ~
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)6 w+ `' h* k: d  e- J
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
5 W( e6 ?2 q6 d: f/ I5 Q7 `例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..* o1 e, ^( L+ @1 \2 M
. X. l8 M$ \) L; O! f1 c: ]# S
4、说明:子查询(表名1:a 表名2:b)+ G+ d. F5 n' |. b/ W
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)  z4 {' _3 S3 E: L- l
: X4 z; ?+ w5 k* s* B# u
5、说明:显示文章、提交人和最后回复时间
* z! u- `0 m' W- m- R" d, B- _- _select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
) c+ r2 X6 V0 l: I- \8 p+ P8 i
1 \" ?% S3 ?) z5 ]+ f( O) I' O% X0 |6、说明:外连接查询(表名1:a 表名2:b)( D: O* f5 Q- W2 L1 [& C! I
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c4 k+ H* U6 c- D6 k& v

* w3 P# W  M1 T; L2 t& C7、说明:在线视图查询(表名1:a )
- t- ?* E9 c$ _. f% U9 [2 L& pselect * from (Select a,b,c FROM a) T where t.a > 1;
; Z6 |. h! j& F: |
# b) F; Y* Q2 i+ l/ o, D; v3 y8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括+ y3 ~7 ~7 f4 }+ a* A
select * from table1 where time between time1 and time2
. O! O7 I( J. x: i: wselect a,b,c, from table1 where a not between 数值1 and 数值2
: z! r% e" }1 h& D; ~( z. u" Q% E9 d3 \/ r2 P' m6 h
9、说明:in 的使用方法- A0 n" |2 }' \8 d. R& `
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
4 l1 l- k; i5 j+ k
1 k: J+ ^4 I* @1 |10、说明:两张关联表,删除主表中已经在副表中没有的信息- R0 t9 W) `. a, O. R4 H- h2 ~" j
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )' g; h# ^3 d! @, s

# `) Z0 U( z5 W4 U4 J11、说明:四表联查问题:
; h! j4 K& r( g" ]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 u' ~+ r4 w- X* q9 v* Q, s5 T" v
/ ^2 K- ^9 A5 k! N# R3 W12、说明:日程安排提前五分钟提醒
0 p/ R0 s8 D) \5 o  q' d. `: ESQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
$ S# G1 \2 @) r% B! I2 W2 F5 C$ K5 d
13、说明:一条sql 语句搞定数据库分页
1 ^+ j0 A4 J; u+ i# lselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
+ J5 X4 d; q* @' d
; o$ y8 x/ U: j14、说明:前10条记录( m# Y7 L0 y. M# c! E0 r3 z1 W
select top 10 * from table1 where 范围7 V0 p+ i: u' B( U9 D  o5 m

, e0 n- o! x! Q' t% @8 }% f15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
  k+ C5 F7 H* M3 E) nselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
, U& ~& r+ W1 ^1 n, _
* C- `" Z& Y( k6 s, S' l) Z16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
9 H' e6 {' u( M1 P(select a from tableA ) except (select a from tableB) except (select a from tableC)
% |, |& K" J6 e/ o: Z! f$ v% v+ q
' o* _4 @, L+ {17、说明:随机取出10条数据
- E  W' H: R* i1 Sselect top 10 * from tablename order by newid()# ^. a: \+ F& ?$ g) W8 v

6 h; U* x* \- h1 T18、说明:随机选择记录
1 w! L4 u' j4 t# p* H6 Q4 j+ Wselect newid()
4 u( y, k: Z! M# V2 H3 x% T
3 R* R5 ^* K- n19、说明:删除重复记录
' b/ t( I* Z2 a) s- ~Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)2 F+ [1 X1 c9 O& G" O! f8 ^
- p6 O( K$ |7 j) }6 D4 z0 G% n
20、说明:列出数据库里所有的表名
/ d2 n/ B* @+ |$ N/ qselect name from sysobjects where type='U'
# b* J$ f! F% o4 f% T7 i" E9 T( b( D" y1 l  v+ i6 X6 d" y
21、说明:列出表里的所有的
, H' S  O: K, o) ~. w. A' M7 g4 Iselect name from syscolumns where id=object_id('TableName'): J1 Y9 n! U* N" q
4 m0 _6 f$ \. J5 r1 h1 Z
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。0 P0 i8 y) P& |8 J  [) V
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# i8 o; z6 s3 ~7 q! ^# b
显示结果:7 g( D" L* e; R/ b: j$ M1 C$ R2 H6 J
type vender pcs4 \1 L5 B; {3 [
电脑 A 1
5 t! b* G$ p; S- S, \电脑 A 14 `" J" H$ _9 \/ B
光盘 B 2( x5 n1 a9 B/ P: O( m# F0 T
光盘 A 2" Z" u6 D; T* e( e1 }
手机 B 3/ C' u1 U6 D0 b! D
手机 C 3
2 S" [7 A7 l: z
: `$ t7 c# g( Q+ g+ ]  c23、说明:初始化表table1
8 ^' }) T+ G- l4 [* u/ D& ~1 ATRUNCATE TABLE table1
) o7 n6 P/ N6 n* n' J% p2 L. u* @& `' l3 W$ K8 b5 i
24、说明:选择从10到15的记录
/ g! C! l, O& t$ ]select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-12-9 21:01 , Processed in 0.021001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部