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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:& G2 W+ y8 ]' N
DDL―数据定义语言(Create,Alter,Drop,DECLARE)
# P+ @# i5 B' TDML―数据操纵语言(Select,Delete,Update,Insert)
+ r: J& o+ F, BDCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)4 B% R, G0 z" ^* ?+ w' F# i
0 A% v' o- q+ u1 q3 q. u8 j
首先,简要介绍基础语句:
) m6 i1 |# s- X4 ?  ~: b1、说明:创建数据库
6 A6 x7 K$ N: }2 T1 n1 n  cCreate DATABASE database-name
, e4 `' e& d  N4 n! ?0 w; j( n- w. p2、说明:删除数据库1 r9 A8 I. }$ E* b/ j
drop database dbname
: d4 K# d" F1 \: U! `7 `3、说明:备份sql server
0 B4 w  g; j0 h2 r3 e. ~--- 创建 备份数据的 device
4 o) T3 z9 G2 O) }: ]6 q$ l9 NUSE master
0 R$ V4 `, L# |3 ?% M% q; HEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
: ^. g/ A8 t6 t- z  F% B# x--- 开始 备份
& W1 b, G0 Y9 Y' y' t+ `BACKUP DATABASE pubs TO testBack
* }, t, f+ e8 w) I5 N, |4、说明:创建新表
$ H3 f( O  M( A! V% pcreate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
) Q5 e+ _+ G4 U8 Q0 m% U" b根据已有的表创建新表:
" I1 i# O7 j8 T& L8 [, ?) fA:create table tab_new like tab_old (使用旧表创建新表)! l" ^; e  y8 \" x- V
B:create table tab_new as select col1,col2… from tab_old definition only
& D$ @( i+ R8 L1 F5、说明:删除新表8 c3 w9 X! m' O; j& Z# a
drop table tabname
% I* R8 e- m& \7 ^5 @6、说明:增加一个列- N: E5 r; `+ t
Alter table tabname add column col type
; ^; k& z" J. N$ u3 N注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。, w; G* J, A/ t( v1 Z
7、说明:添加主键: Alter table tabname add primary key(col). ~% _' C2 P+ r& M
说明:删除主键: Alter table tabname drop primary key(col)
$ Q- }* p, L  M  Q8、说明:创建索引:create [unique] index idxname on tabname(col….)
0 Z- p, X$ O+ c( b: L$ U; g删除索引:drop index idxname
+ ]: x6 _3 |" r注:索引是不可更改的,想更改必须删除重新建。
! E1 K% h" q) p9 d! S9、说明:创建视图:create view viewname as select statement) A9 v7 k4 L3 m
删除视图:drop view viewname, `% \9 ?5 @( a/ E6 Y
10、说明:几个简单的基本的sql语句
' Z& P/ E- P! \9 h+ g' S- J( H0 q8 J" `选择:select * from table1 where 范围1 _; M4 I. R  _2 S; W
插入:insert into table1(field1,field2) values(value1,value2)' S2 |3 i" R' }# H5 x' l
删除:delete from table1 where 范围, k6 T2 }: b) w" U% U
更新:update table1 set field1=value1 where 范围$ w, T$ W) @; P* w  V4 a- F
查找:select * from table1 where field1 like ’%value1__’ 7 _' Z# e6 X3 D+ n0 f- W1 h' ~
排序:select * from table1 order by field1,field2 [desc]
  J7 ^# R. X* \" q0 n' R总数:select count * as totalcount from table1; r; v9 [9 O: ?8 B' @. T
求和:select sum(field1) as sumvalue from table1
; I' v7 @" e( [( }2 F/ S5 a平均:select avg(field1) as avgvalue from table1
1 x9 J/ u3 q! W) W. v; P% }最大:select max(field1) as maxvalue from table1' Y/ L& v9 R2 C7 `
最小:select min(field1) as minvalue from table1
3 {1 y" v  K# t11、说明:几个高级查询运算词
; ?' m# [1 f5 |A: UNION 运算符; F# k% C* W- }. M" r
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
5 O) l* @) b& S" ?$ IB: EXCEPT 运算符0 x& r& M. A( E
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。0 ?9 f# P, g8 o
C: INTERSECT 运算符. S$ y0 J  B: |/ S- L$ H! y: |
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
1 c$ K5 P1 G7 Q$ Q8 A5 E( J注:使用运算词的几个查询结果行必须是一致的。5 ~, v5 W9 d0 M$ v8 [
* h* C5 m: Z4 U9 x; t2 u
12、说明:使用外连接
6 }8 u1 w* y, a8 ~A、left outer join:
$ V$ {& D& R$ _. y/ z左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
+ |8 ~+ r) t: h; M+ jSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
" y8 e. K5 W! F4 i0 F# r( rB:right outer join:
! D# D1 l- n$ e$ {" }1 u7 P, T  x右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。2 u. c! Q# ~+ l+ a3 D
C:full outer join:2 A+ B2 B; {" l
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。: `% ~( b# ^( u& D

" P0 t; M/ `2 m9 n其次,大家来看一些不错的sql语句# u! m" i% }5 D8 S! r) N! t& N
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用): ?# X2 q, {0 |0 W, @: r
法一:select * into b from a where 1<>1
- z9 ~2 U2 p1 u: k1 H2 B法二:select top 0 * into b from a
, [- \* p+ e6 R' o. @7 d/ y
/ u, X/ _& C, D0 u7 f7 L2 m) g2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
: ~5 j' i% d' s8 V1 f) O# ]/ \insert into b(a, b, c) select d,e,f from b;/ \: a& I7 x& W/ l) q8 \* R2 _
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)5 f& t  ]0 ]! |0 ]3 n; }4 {
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
; [! s) R: O; F$ ]$ q: _例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
& J! v4 s5 l! Y+ W& {* ^) s! W1 j- ~1 h
4、说明:子查询(表名1:a 表名2:b)
% R8 q* ]9 N" I- k' \6 ?# Y8 Jselect a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
% S& r7 w6 `6 Y) b# b( b& {& ^9 l, T& [2 C0 s( n# s" j
5、说明:显示文章、提交人和最后回复时间
9 J$ D& J7 r' ~; o, [select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b7 e4 d2 e6 C  B5 O: p8 l* M" G* c
% G- r- p, F5 ?/ q8 A/ H8 B+ R$ A2 [- b
6、说明:外连接查询(表名1:a 表名2:b)
5 T/ v, {+ p4 ^/ p0 O, g7 Tselect a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
( b: ^, ~0 f/ d0 X" [
0 D; M0 X3 q* v, y8 _7 x6 U; `7 }7、说明:在线视图查询(表名1:a )
! c6 ]6 \5 a$ c/ ]9 n: V0 Mselect * from (Select a,b,c FROM a) T where t.a > 1;, N9 ?* Y4 o, y: V* J9 |

; G: p& ^1 \' R" E4 z. Z8 ?( A8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
0 E4 n5 N% ^8 _6 I/ j# |select * from table1 where time between time1 and time2
8 n, k8 o0 r6 ], o. ?2 Fselect a,b,c, from table1 where a not between 数值1 and 数值2
/ |8 f3 {+ ^+ T: s% o  n% S
1 f, r9 b: R, s9、说明:in 的使用方法
( }9 X# L( U: E2 pselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’). }: [. I+ T. c9 I* k9 Y$ w1 y
0 P) U1 Q" x" @0 X8 I+ {9 k- l
10、说明:两张关联表,删除主表中已经在副表中没有的信息
" {- A- U2 w' V. ~& o3 Kdelete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )/ d  E  Y+ G2 Q3 H- b% ^

" e% `9 K% u1 ~5 \, }$ i2 z11、说明:四表联查问题:9 }. b! P( S+ z( f/ a9 r
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 .....- p% O( ~' T/ R5 g8 a

6 C% E7 B% {: z+ ~12、说明:日程安排提前五分钟提醒
" l# _" J# b5 e, V4 U1 |5 @) |SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5  b' D) v0 |9 n4 \7 h

$ d8 M' A4 F) H! {( P0 v1 c13、说明:一条sql 语句搞定数据库分页. i+ ]  g# A. B' O- y$ J, M4 R5 m  F, G
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段2 A& D4 C; n# d) }* b! w2 G2 s

. W$ a8 U: V2 p6 w/ v5 j, r1 f14、说明:前10条记录2 B- Y" S9 L$ g1 n0 k# E$ s
select top 10 * from table1 where 范围
- f- Y2 }  H' X2 G
+ N: b* u, x, G5 A2 ]/ o* i" I' g15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
2 S. V" y: w2 J+ Eselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)7 K" ]" B8 J) R
6 ]; p( d4 r; @
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
% R5 I! J. |# Y+ K/ M, G3 g(select a from tableA ) except (select a from tableB) except (select a from tableC)" j- O- `7 f+ Y2 z% x3 Y
6 y, x8 z, h1 w/ w
17、说明:随机取出10条数据9 q1 n# U. h. d" J( }) T, c
select top 10 * from tablename order by newid()
& K/ D% M. G* \5 G, _+ n3 b
* E4 I$ h2 L+ S: K18、说明:随机选择记录
  i% w* `2 u$ j; _3 t+ J5 z; Gselect newid()( h( d) Z# h1 N. ?0 t
- J+ q/ b! M# C
19、说明:删除重复记录# j( J' \2 C0 H% c7 a9 k, v- t
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)' Q# e2 ?$ E1 y
/ ?3 `8 ?: X5 L" ?- b0 P. b
20、说明:列出数据库里所有的表名! {8 K; m& q4 x; \. g' a& n
select name from sysobjects where type='U'
2 v% `5 R3 t/ N: W8 w
; z: h" P4 {3 D5 @5 A  c9 ?21、说明:列出表里的所有的+ g9 O. Y/ N& K0 e8 y
select name from syscolumns where id=object_id('TableName')) W) d: W/ M/ l7 a; G
: n! C9 C+ k2 K7 F( C
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。) y) i, {( h7 L) N& \
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 type6 X! K" J9 H9 K5 u* O$ R
显示结果:: X: A& d9 R3 Z( ~$ f$ ]
type vender pcs
! ?( {5 I3 ^6 y3 O; a电脑 A 1% {/ m( U' i; s% \
电脑 A 1
( G$ B' v7 h+ z* x$ s* G光盘 B 24 ?% I3 }2 s4 F' h- y
光盘 A 2
' y3 s' H0 |$ R& \% l手机 B 3  I. H. `# D- s/ F2 t4 n! w; p$ h
手机 C 3! C1 f3 T% g! j# l

: J* l- J9 X2 P  G: I4 y( j23、说明:初始化表table1* Q  \  k0 }/ E! v" ~$ N5 s5 f
TRUNCATE TABLE table1
: r% ~8 \1 S, q7 \0 q3 J; A. b' J- p4 ~- I5 U2 `
24、说明:选择从10到15的记录
/ K1 n. k  b. N% Gselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-12-7 20:59 , Processed in 0.022001 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部