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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:& b& F! d+ q2 e
DDL―数据定义语言(Create,Alter,Drop,DECLARE)! ?6 }$ @" k4 a& T' |3 o8 g/ c$ t  v  p
DML―数据操纵语言(Select,Delete,Update,Insert), r! g' `) n# t; R
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)- o9 P: B: S& V! B
: q) h7 w1 ?# a# `% j: b  M5 t! ?
首先,简要介绍基础语句:
% [- G2 Q" |. j1 B+ T  S  F6 _& s; q1、说明:创建数据库
+ X) `7 T0 z1 TCreate DATABASE database-name- f; _& b- N2 q- \3 J! U
2、说明:删除数据库
: r6 `% n7 Y. w$ }# v0 y. g0 ~drop database dbname
0 y: J: {. E" l. o  m3、说明:备份sql server
$ y, Q6 ^- i  K' ~$ d- ]--- 创建 备份数据的 device
! ?/ b# R- r+ p8 A6 M: SUSE master
) i* @, p: E1 \EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
. d* n" m  m0 N& u--- 开始 备份
' \; T4 ?# K0 `8 z2 i( d7 i0 vBACKUP DATABASE pubs TO testBack+ T( D( J, F( z: v) z7 e
4、说明:创建新表
  b$ [7 R, x* ?8 `create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..); D8 b# v5 ^$ p$ m7 [6 }; f
根据已有的表创建新表:2 c  o0 [, b: [  C" a
A:create table tab_new like tab_old (使用旧表创建新表)
- b' T7 G; A* D( K: rB:create table tab_new as select col1,col2… from tab_old definition only
  w4 [% E. Q* H7 X6 R( p( Y5、说明:删除新表
0 ?3 w5 \3 ~/ C4 z% v+ M6 E/ Ldrop table tabname
% U# C/ Z* e, k' Z, D5 y6 p/ {6、说明:增加一个列
6 L: s% h1 x# S! u/ P3 \Alter table tabname add column col type
6 d3 E5 s; Y' L5 s, q注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
0 C* Z" o7 t7 Q9 c* I2 [+ y7、说明:添加主键: Alter table tabname add primary key(col)
/ C5 ?" s9 ]) Z9 C+ H9 t8 O说明:删除主键: Alter table tabname drop primary key(col)
5 `* w) }! L2 V; ~# m8、说明:创建索引:create [unique] index idxname on tabname(col….)
) \6 F& @* h# H# `) z* d删除索引:drop index idxname2 U" Y  P* ?1 h) e8 \
注:索引是不可更改的,想更改必须删除重新建。
& M: ?8 {1 x" b, b- Z, q- O- [9 d9、说明:创建视图:create view viewname as select statement5 T3 u4 j0 U! A( V
删除视图:drop view viewname/ r" F! ~  X  V/ u6 v/ B9 D" |
10、说明:几个简单的基本的sql语句: M% x5 |- g/ v7 E& i3 A
选择:select * from table1 where 范围
# B6 x" b9 I# P9 O插入:insert into table1(field1,field2) values(value1,value2)5 l' H5 P9 g$ P- o8 w1 a
删除:delete from table1 where 范围, K7 Q9 c' x* D2 s  U0 f! n
更新:update table1 set field1=value1 where 范围
& M6 U' `" g0 j4 i: Z; ?查找:select * from table1 where field1 like ’%value1__’
$ W+ I$ p' T! F8 @5 {' Z9 s排序:select * from table1 order by field1,field2 [desc]6 B* Z" h2 X9 D2 ~% z
总数:select count * as totalcount from table1% }+ t0 t& z* J/ ]
求和:select sum(field1) as sumvalue from table1
5 O; y7 J. j, G2 j* H; f平均:select avg(field1) as avgvalue from table1! l" V0 [- d* W+ v% T2 q1 [" ^! K3 b
最大:select max(field1) as maxvalue from table1
; j9 Z5 e) W5 U  I: J! i* e最小:select min(field1) as minvalue from table1) Z! {9 _) \* Q8 X# `
11、说明:几个高级查询运算词
9 {' `0 V7 G" G. UA: UNION 运算符3 m; y* A0 x& ?- T( `0 G2 M
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。8 Z* |2 \3 }) u9 n0 s4 U$ O# D6 F" |
B: EXCEPT 运算符
; _/ h/ p! a# M$ {9 SEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
1 f1 U4 y7 V7 uC: INTERSECT 运算符& a2 L  J4 F" W+ V0 Z, o* o
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。: `* Y2 x7 T' n
注:使用运算词的几个查询结果行必须是一致的。5 l- t  l4 x. z1 m7 v: T
5 N9 M' D' R9 t- s) E$ i- d% m4 ]0 f
12、说明:使用外连接% _5 G+ o' Y. l8 j6 {% Y
A、left outer join:) C8 z+ u" y+ z1 d* s
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。. z7 e/ Q' W! r7 X$ c
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  \$ }8 M- h) I. D
B:right outer join:
* j4 P' W" P2 \" k右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。' }( c$ c% t$ b) w' Q# j2 C. @
C:full outer join:% X9 P& W, g9 K& L( e! i
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
' `' y" v7 i, X% _; k# x( p4 s/ ]6 X; [% t" N+ b$ [) M- r
其次,大家来看一些不错的sql语句8 W, _" E$ G9 o% B6 [6 b, X' D
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)3 f. l7 ?, e1 Q5 \. x) f7 P
法一:select * into b from a where 1<>1. L& H' Z5 j7 M
法二:select top 0 * into b from a
6 m2 h) k7 u: i3 v* f# N% T+ I: L2 s
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)" _; p; j2 J8 R$ l* V) m+ l
insert into b(a, b, c) select d,e,f from b;
. z2 R* y. A6 L4 V3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)0 i1 p1 i& m" O
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
! }  V8 B3 y: G% w例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
- ?$ X. U( Z, G: s
3 M. F& D7 w' {# U# c4、说明:子查询(表名1:a 表名2:b)2 S2 z8 u( _. K4 U& E* `1 Q, N1 N
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)7 [/ j0 T  R" \% W4 B6 o6 |
# u# V4 m0 `, N4 x1 z; I
5、说明:显示文章、提交人和最后回复时间
  C9 v+ r0 t7 j; I" L2 j- `select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
. ?  W( M8 d2 v! D
5 t! `) Z8 h4 m0 j8 H6、说明:外连接查询(表名1:a 表名2:b), G2 _+ c* g+ ^7 L) g, 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
8 z7 Z+ Y0 J7 x! g
  C' x2 K% x! J- S7、说明:在线视图查询(表名1:a )( Z( A7 m# Z# g. Y7 O$ q
select * from (Select a,b,c FROM a) T where t.a > 1;) k: d4 Z+ Q, q# {$ }% Y6 Q

1 P$ W8 C+ A7 n; o; H& T# z8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括7 a/ M9 K1 ^1 E6 O) [
select * from table1 where time between time1 and time2
- i- r4 R! E1 _2 e8 Fselect a,b,c, from table1 where a not between 数值1 and 数值2
# ^+ g. z% ^. f8 C# T( Z% |1 A3 N- l1 R/ U5 ^' t+ r7 v9 {& M
9、说明:in 的使用方法
1 j5 h0 X) @7 s, k3 W' L' V# R. ~select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
7 C4 o7 y9 O( y2 u: I. H' {( p0 ~6 _
; g7 F: g: v2 Z5 F+ U8 B* t* P3 i( ]10、说明:两张关联表,删除主表中已经在副表中没有的信息8 F4 n/ [, u. d
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
% h; G1 e+ m1 X1 E' M7 J8 A% K
" D5 R2 O% l9 y( }11、说明:四表联查问题:
* G: Y7 D: G8 Q6 bselect * 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 .....
( e' _, g( ]7 v  H* ]( @2 G% ]
* k; q; ]! y+ t9 c* K# J$ }12、说明:日程安排提前五分钟提醒
: l5 ~5 g- f7 f5 nSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5# e% _- ^6 x4 g2 |' `1 H" |/ r

+ T" K! \" t, {: |+ C* D  L8 d13、说明:一条sql 语句搞定数据库分页
' R2 X& \7 m, p5 k# W2 fselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段3 }- M  K8 }( V1 w1 Z+ i

/ N9 v8 w$ _3 N$ h) D, L3 [14、说明:前10条记录/ J8 |# D6 A( |
select top 10 * from table1 where 范围
( f6 |. l9 Z0 `6 |; s- ~
: Q  R" }; O" E5 J% m5 I" D15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
4 q! d$ l: Q1 f9 O# dselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
& F0 S) U( M( @9 s- {
1 W5 |1 R! {( o16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
- }6 H+ D, N' w- ~* \7 T7 q7 t- T(select a from tableA ) except (select a from tableB) except (select a from tableC)3 ?# s; H) X! `& E; M

6 B4 |( u4 j7 h. i) b# s17、说明:随机取出10条数据' V2 [# P) \! K  b! {" `& J
select top 10 * from tablename order by newid()
! I# L, U; X: H7 X" m# B: x9 U8 R1 Y# r: b' z
18、说明:随机选择记录
+ Y1 H( {  ?  U* N) a* x# |select newid()% X  }5 Q8 h3 ?& l+ l2 |- z
$ u% |) w0 K6 \4 m, i
19、说明:删除重复记录
( k1 s* ]5 N5 b, Y. IDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...)1 o$ A& \) V$ r! ~' y
. F: t: [. F1 g2 N/ r% j
20、说明:列出数据库里所有的表名
5 r0 M" ]# K& e2 Dselect name from sysobjects where type='U'
4 t3 p+ C0 R8 R! i1 G3 j" m+ x7 d4 E
7 N0 \+ G" O8 t4 d9 O, c# ^21、说明:列出表里的所有的3 ^3 i4 o  ^: e# v! Z* g
select name from syscolumns where id=object_id('TableName')# k8 ?% C' h$ A& s
: c- z) |/ R0 {+ B2 t$ O/ {
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。" m0 d( t4 y% h- 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
' }' w: _2 b9 {+ w, v显示结果:
0 h7 k3 o- M/ F: p9 |. y! ftype vender pcs( X/ A9 D- T# l. T; d4 _
电脑 A 1* o3 O+ x5 q5 X, c" R% k1 A
电脑 A 1
' C% ~4 M& L  b# b) L2 e光盘 B 2# [8 [% c# y6 q6 r7 X
光盘 A 2* [7 z; g8 W3 i5 y" P
手机 B 3
8 O7 D' T) X8 A0 H手机 C 3
0 `; l. U9 B) G8 T/ X- M* v! E0 X/ K2 P! e% k5 Y2 ~4 p
23、说明:初始化表table1
  y# H8 l$ T2 F  N0 L1 oTRUNCATE TABLE table16 c3 b! Q- z9 n% P9 M: q

& l3 Q' b( D- T; r+ ]0 L, a3 J24、说明:选择从10到15的记录* x3 d! }5 G" |; e" f* z5 z! d: v
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-4-19 19:51 , Processed in 0.015600 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部