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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:  v9 G* W& g" c/ G
DDL―数据定义语言(Create,Alter,Drop,DECLARE)
4 w0 b2 F: G3 b1 w. IDML―数据操纵语言(Select,Delete,Update,Insert)7 f8 F; @# d1 W, z8 C
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)0 g0 N& U; u5 K; i

- y$ r; ^, _5 a+ M首先,简要介绍基础语句:
% G0 k/ }4 d" ?1、说明:创建数据库7 K' e, Z& k) @  K- _( t6 B
Create DATABASE database-name, @/ |9 Z5 o, a* }* }5 Q( \
2、说明:删除数据库3 j; S$ k( k5 [4 s% l5 U4 A
drop database dbname
9 d! o) D* w/ x6 C3、说明:备份sql server' y: g0 [% s6 i. C6 Q
--- 创建 备份数据的 device
3 E5 X; v4 k5 B8 g( p$ xUSE master
* N% y9 M$ m8 ^7 C6 i* \. gEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
$ `8 \4 h; J) \" X% V--- 开始 备份2 o0 J9 f" _6 e& o  `7 |
BACKUP DATABASE pubs TO testBack8 T( P, p$ I. L0 |  R* s0 E
4、说明:创建新表
! [% `) X& F4 I' c' W* Screate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
( `7 C( m6 E2 K' v2 @9 G. ]7 W根据已有的表创建新表:$ O5 K6 J9 u( Y6 g
A:create table tab_new like tab_old (使用旧表创建新表)% u0 Q, ?  E: c/ _0 r
B:create table tab_new as select col1,col2… from tab_old definition only1 p( O: e, c2 }- b
5、说明:删除新表
7 f0 ?4 |$ n/ S  `  ]1 Qdrop table tabname% r  C: Z5 I9 }/ x* M$ Z7 i! d
6、说明:增加一个列
6 z! ~" f8 s+ B/ f" hAlter table tabname add column col type& W8 U. a% C, B& a9 I$ E+ `
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
# k  B* y$ K& D( u# D' n/ d' d7、说明:添加主键: Alter table tabname add primary key(col)0 P/ _1 S. {+ s* d/ R/ K
说明:删除主键: Alter table tabname drop primary key(col)( T7 z& E# f7 Z* n
8、说明:创建索引:create [unique] index idxname on tabname(col….)
6 t  C' k- T( j$ y- }8 n" \删除索引:drop index idxname
3 h7 u, M; e+ i5 c- N注:索引是不可更改的,想更改必须删除重新建。2 C; `( X8 ~/ }- \( s1 T
9、说明:创建视图:create view viewname as select statement
! N+ `; E& Z- P& S4 o6 S删除视图:drop view viewname
- W" k: D3 v% N9 ?6 @# `( `$ |10、说明:几个简单的基本的sql语句% q4 X2 O- x/ r  Q5 P' E0 b/ k1 g. R
选择:select * from table1 where 范围
# k, S: }6 j, Y$ H* Y插入:insert into table1(field1,field2) values(value1,value2)5 b  c6 x$ y' H+ @
删除:delete from table1 where 范围, e  \8 Q3 r; i! N9 C! b
更新:update table1 set field1=value1 where 范围$ t' u/ `6 D5 S. q0 t) |, L
查找:select * from table1 where field1 like ’%value1__’ ! C# Z2 O% T0 {6 Z; O
排序:select * from table1 order by field1,field2 [desc]
, ]  P5 y* ?$ ?7 _3 u, w2 q, k总数:select count * as totalcount from table1- \9 h- `3 M8 |  [6 P, ?
求和:select sum(field1) as sumvalue from table1) K; K+ y' F! r% i  x( u
平均:select avg(field1) as avgvalue from table1
" ^; u$ b& ]$ ?, U; E" ?$ Q1 g最大:select max(field1) as maxvalue from table1
4 c. S2 S5 Z% `1 V最小:select min(field1) as minvalue from table1
) Z- p) }' `  N/ K2 `9 U* ?! A11、说明:几个高级查询运算词
7 D4 `: ~: F6 z4 y2 a( A) NA: UNION 运算符, ^8 Z( M+ R7 i( Y
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
# P5 c9 \. B* g  Z2 tB: EXCEPT 运算符
. e' K0 b3 N. Y; rEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
6 G* n0 H' v/ ]3 K/ X. s; Z5 W5 BC: INTERSECT 运算符1 W3 O/ u3 b9 [: X, z' X/ N
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
. ^' M. F* @; B) ^  N注:使用运算词的几个查询结果行必须是一致的。
4 [( K. k5 E+ t! |4 @3 M# K! j0 |0 Y* E. O8 w6 y
12、说明:使用外连接
- l6 W2 A$ b- _  sA、left outer join:/ x! [6 }# e5 O% m
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
/ X6 L. ?8 G6 J5 E: PSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
& E; {; ^# b* H* M* d0 \& L' P0 SB:right outer join:
( c, x- _3 B- c$ g9 r7 N右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。" d/ w% l+ u0 O( I8 U9 C: }' H3 \
C:full outer join:
% h# M- f) }4 q全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
  q$ n) v- d7 m! |( w# F) }; T/ y0 Y$ ?
其次,大家来看一些不错的sql语句
6 Q; |3 T+ W8 a8 E6 j, Z1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
/ ?( g6 {. V! X, _& I( c, n法一:select * into b from a where 1<>11 s5 W1 e& |1 l' [1 D- @0 E
法二:select top 0 * into b from a
% I5 t1 }1 {8 F3 Q: e& f& O7 L/ P5 |/ T# d2 G7 R
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
* E4 C% {" o8 @4 r/ Hinsert into b(a, b, c) select d,e,f from b;4 z/ E  S9 h; J6 u# ?- q8 i
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)7 B/ K$ P% R' ?- U
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件2 L- v4 f% T7 C  F# N0 L0 O! S  K* Y" d
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
: A% F& H; W1 [9 Z! J, v8 x5 [6 j! }& D5 V$ Y) R& b
4、说明:子查询(表名1:a 表名2:b)
+ i7 \" r( R5 l& Tselect 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 i" `* [0 @' ?4 ?" R2 _! P) ~
7 a8 V/ w6 q% p5、说明:显示文章、提交人和最后回复时间
6 _: N9 b4 G# e2 Uselect a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
; r- V7 ^, Y/ X9 g& ^4 T7 \6 w) c3 Q7 D" Q7 m
6、说明:外连接查询(表名1:a 表名2:b)
" b- V) ^; f5 H- ]4 Y( g  P" n" {select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c! l& k1 n; c# [, w

' }# p% N3 I+ `7、说明:在线视图查询(表名1:a )
4 ^. o+ f' Z. Z+ C* F$ Bselect * from (Select a,b,c FROM a) T where t.a > 1;- ^2 G$ a. W) p3 P
7 A7 M5 U2 y0 T9 Z
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括+ Y% p3 Y7 s6 _( N
select * from table1 where time between time1 and time2
* K6 g& U( h3 h9 H8 |3 ~select a,b,c, from table1 where a not between 数值1 and 数值2) U: S( h3 f* ^1 {( E8 F

9 {- Q7 Z/ B6 ^  U: m5 w9、说明:in 的使用方法
2 M, W( G8 \5 g9 K7 ?2 Uselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)7 T( g  v; r3 W% U* V; R  M" ^

, ~/ b" `; ]( s& d* T! y! G, j- C10、说明:两张关联表,删除主表中已经在副表中没有的信息
  A  S) F" |! B: }delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )! n; }( |7 m* X! z

& B* q9 m" E# M1 u8 C. z2 h, j8 X- t11、说明:四表联查问题:2 ~  o8 h. A3 M6 \5 }
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 ....." p2 u2 O5 _, z, [5 _
4 t, B1 a+ `& x- x, x4 R& G6 c# ]
12、说明:日程安排提前五分钟提醒7 d+ ]/ j! Z; ~' Z" d) f0 u$ m
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>59 u5 ~( U3 V1 Y/ I( o) U9 g

, A+ _4 A% a! a6 |) S/ `( I0 p8 U" z% b6 ~) v13、说明:一条sql 语句搞定数据库分页4 {. X9 O; V( g% F3 y# [/ d
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
9 Q, m1 e# R6 X$ K9 s( |" a2 ^5 L& P; P9 M+ r
14、说明:前10条记录4 Z" v% i+ Q# [" ?$ `
select top 10 * from table1 where 范围, E7 V- T" V5 m3 Y) h
+ B/ `0 u: [$ t+ h$ N% X7 S
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
1 W6 e: e: b1 h9 M4 s% G$ @select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)% O+ q$ A( w8 c1 L1 A! {
) H) d3 i  Z$ G. `/ G* q; J% L
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表2 D7 A8 E5 l- {4 b- O! g! w- [
(select a from tableA ) except (select a from tableB) except (select a from tableC)
9 ^. _5 R  C/ R, |8 t. Y+ F+ \, |& }# c; w5 h
17、说明:随机取出10条数据
! C  n/ `* M' Y/ f0 J$ M' lselect top 10 * from tablename order by newid()
3 `& a  u+ R$ R* E9 V" K. q' y- t( {/ C$ o- }. a
18、说明:随机选择记录9 c7 k5 M& H2 S3 r1 K
select newid()
3 {# E6 H% a6 b. P( \5 s* f5 H2 Y% n
19、说明:删除重复记录
# P  F2 }% P; k0 O- x9 jDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...)+ b4 s1 T! `  T

; m+ g6 t+ p$ K20、说明:列出数据库里所有的表名" s8 ^; \0 \7 h" j8 e
select name from sysobjects where type='U'
- Q1 d9 n) K& f* {" |8 [: l4 ^
  I' D# ]; X* a- B) A21、说明:列出表里的所有的# B& E8 {$ H" @5 \" K( L* L. O; @( R! f
select name from syscolumns where id=object_id('TableName')
. m4 |0 C6 o+ _! K
: y: a. M" J) V) C22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。1 u, X8 ^* _) R" F5 e2 u
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- T" B# @0 j% g5 W8 L, k
显示结果:
# E; A; `6 ~7 j+ P; _0 b6 U9 ~% wtype vender pcs
5 ~: v8 C4 ]* e0 k电脑 A 1# |& S. y+ B) w# b" `! |
电脑 A 1, j1 g( j; {; S1 G2 p/ B
光盘 B 2/ j5 ~; r+ \$ q0 i
光盘 A 29 J# |- f7 L% L
手机 B 3
$ k1 z! m* q1 k3 R1 o' _; @手机 C 3
4 n* T; K5 H( z" K8 T6 Y
7 {8 N4 j3 q6 a7 ]2 @# P1 z" s% E! Y23、说明:初始化表table15 U8 B" F: J/ [/ b% \3 |/ d
TRUNCATE TABLE table1* R! X4 `' r+ E$ I& b

' d4 p, r, t' Q( N24、说明:选择从10到15的记录
1 X; c# z+ m* x! vselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2026-1-7 23:33 , Processed in 0.026001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部