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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:, _3 Y) p" c; w  c6 S3 D; j  I
DDL―数据定义语言(Create,Alter,Drop,DECLARE)) J/ c, Y1 C! X, g0 ?
DML―数据操纵语言(Select,Delete,Update,Insert)3 m4 Q( K& T7 s- m
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
3 {7 _. y* Z4 f( I$ e. ?+ ^+ T, C' O3 @) ]4 q2 P4 p
首先,简要介绍基础语句:% M7 U% S5 s' g0 M0 f* L
1、说明:创建数据库
* r5 `+ c$ O& VCreate DATABASE database-name- B1 c. M* P" v8 j1 U: s
2、说明:删除数据库
6 U! H4 k) o- Kdrop database dbname5 f% @' D9 Q! L
3、说明:备份sql server
  z5 @5 S% r0 D--- 创建 备份数据的 device  f. _! r& F; e, {- b
USE master
+ A5 `8 o1 P, T9 ^1 `- N4 CEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'" s, A* |7 T4 ~4 ~7 e- G% e) n9 \
--- 开始 备份* N  x4 v3 o3 M' p1 }5 l/ V8 \
BACKUP DATABASE pubs TO testBack( D+ b2 W# Z) q% C. ]! e
4、说明:创建新表
' j4 Q6 l8 W! ]2 j- t8 `. ^create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)/ L% C; j( c. n( K/ J3 g  S! S: }
根据已有的表创建新表:1 n+ ]1 j" f9 f0 L3 Q7 E/ z$ f
A:create table tab_new like tab_old (使用旧表创建新表)+ u, u1 \; U) k+ O' R' H  a) v
B:create table tab_new as select col1,col2… from tab_old definition only: V6 ~2 ^/ ]7 M: a
5、说明:删除新表8 q& b6 Z/ d- l0 f% ], C
drop table tabname  @2 h! ]2 z1 Z" e+ s  x
6、说明:增加一个列- I2 t8 _# [3 f6 C( j: N
Alter table tabname add column col type
3 t6 u9 c2 B- |% c: N注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7 K) W* J1 R( u: q+ `5 f7、说明:添加主键: Alter table tabname add primary key(col)- X3 s9 I+ W. U' a6 E* m2 H8 Q
说明:删除主键: Alter table tabname drop primary key(col)" c1 s1 ~6 j1 G- a1 S# F
8、说明:创建索引:create [unique] index idxname on tabname(col….)2 U" W* ?: F9 I  v
删除索引:drop index idxname
! I0 j/ x, T* O# \+ I注:索引是不可更改的,想更改必须删除重新建。
/ W3 ?2 p4 }9 b# v( F" Z9、说明:创建视图:create view viewname as select statement
: k) e, N- ?1 R5 H9 A删除视图:drop view viewname
0 W% x! V9 \6 J2 ~10、说明:几个简单的基本的sql语句
& _& p) N! K4 ~( ^5 D  W- g选择:select * from table1 where 范围6 X5 d) I: o0 _. I) E. X4 R
插入:insert into table1(field1,field2) values(value1,value2)
  O7 o; w5 [1 ?; I- V删除:delete from table1 where 范围1 Y( a6 c' g( c& H5 O
更新:update table1 set field1=value1 where 范围
" {$ H; a- G2 e: b, ^# P查找:select * from table1 where field1 like ’%value1__’
; h3 w4 [! u8 S8 N% `排序:select * from table1 order by field1,field2 [desc]! M! j# ?2 Z5 B/ i, m" T0 ]
总数:select count * as totalcount from table1. ?. s' Q+ ~8 X
求和:select sum(field1) as sumvalue from table1
' H5 _. o: P4 I9 Z平均:select avg(field1) as avgvalue from table17 `4 F4 v/ |# }- |
最大:select max(field1) as maxvalue from table1/ E1 Y0 `. o8 {7 U8 d5 J9 o) D
最小:select min(field1) as minvalue from table1
* {& S, B7 L% O0 `( ^) ~& x11、说明:几个高级查询运算词$ t2 w$ ]6 V, t4 T1 A3 v! L; ^3 ~
A: UNION 运算符
3 g9 w6 b3 I' e" DUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。1 ~5 ^* C, L' N5 t
B: EXCEPT 运算符
9 K8 a! x7 j" P  p  v& f/ Y. OEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。6 p+ J7 a" N, j6 [! \1 c
C: INTERSECT 运算符+ I! m0 X  L1 h1 ]4 g7 A. C* t1 x
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。! k8 Y4 t: F" f5 q/ T
注:使用运算词的几个查询结果行必须是一致的。
. i5 x. g% h/ u+ l, ~7 _; \7 B/ \  [( q7 L) W. S6 b! o5 g
12、说明:使用外连接5 A- J, ]; |# A8 o2 [: t6 ~
A、left outer join:8 |6 {4 E% P& h
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
& M) I1 N* U& @' GSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
: U; e( i/ ^4 Q7 [B:right outer join:
$ b5 M) ]% F6 _- k3 n* H) w" m右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。7 O4 G2 R0 p9 ~
C:full outer join:
% [; f! f# m* m! M全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。- i  V# |& b: M) g. y' N

& z$ a0 h; P$ U/ c' H6 [7 P- k/ {其次,大家来看一些不错的sql语句
1 L/ g. s- q3 y8 I6 M5 v3 y6 p1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用). D7 b7 T! ]# Q8 z: X0 M
法一:select * into b from a where 1<>1
0 t, v1 v+ R; ~+ j% ^法二:select top 0 * into b from a: r$ a  c5 Y% Q8 Z" h& h0 ~

/ u& `8 m1 t: m# y3 b: d; Z1 m: ?7 T2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
. ]4 z# j, c6 `% d* [- zinsert into b(a, b, c) select d,e,f from b;
2 W7 @3 f2 e+ N, L' E9 \  U. v3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)' y2 n: B/ ]. e! X" g
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件* @; j7 X/ B9 f. G
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..9 w6 _! ^0 X. ~9 j) U
: @* V- Z+ }& _
4、说明:子查询(表名1:a 表名2:b)$ G4 R5 o6 ~: D. [; {, _+ I! f% {
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)
* s( Y& t. {( c( ^' H  a: a- Z
( v! F  m0 O; S' o9 X5、说明:显示文章、提交人和最后回复时间4 S/ ^+ d! q% I1 z7 }
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b2 [1 G8 @$ R# |
5 b) I/ C5 y1 D) H7 B
6、说明:外连接查询(表名1:a 表名2:b)
  i# b" R$ ^/ F4 Aselect a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c9 S9 A; U0 z) e( n: m5 n6 N. h
1 ^3 t, [: D2 H( p5 p6 L
7、说明:在线视图查询(表名1:a ): U. D5 P- l  z* Z
select * from (Select a,b,c FROM a) T where t.a > 1;, U1 {* X) U) F# C
9 X1 l$ V% X* F) a( l# o; u
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
! y, G6 o- N* I( pselect * from table1 where time between time1 and time29 Y8 ?! S& X& M: s
select a,b,c, from table1 where a not between 数值1 and 数值2
: v: F3 ~: M: F5 I8 v- u7 D
  Z7 R& m" H0 P8 A' i/ Y  A9、说明:in 的使用方法
# L2 M+ J# t! y* e; Zselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
% `4 b0 p$ c9 X* p7 g: }# F8 E1 Q. q
10、说明:两张关联表,删除主表中已经在副表中没有的信息" z  D- b' X: a9 R: b
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
$ a( _2 P0 x. U- [+ i9 M
# e  @' [! E. W4 d3 r1 B11、说明:四表联查问题:2 B4 c7 i) _" x9 {
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 ...../ v) |( `1 s3 K1 {5 S# P/ p3 U

3 n5 t* g4 W+ d3 R% _. J12、说明:日程安排提前五分钟提醒
1 E! y  s4 R2 WSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
8 g9 w- p, {  p' n, ^/ x; E# R+ U  L* Y) l& L) u
13、说明:一条sql 语句搞定数据库分页+ U- r6 _6 u$ s* k! u# @5 a/ d/ E
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段# x2 g5 n0 r& y6 X! K$ u
  n! }- v: Q8 Q1 u
14、说明:前10条记录  c) N6 m# V/ L, `' P
select top 10 * from table1 where 范围% }4 `0 |6 ~2 Q2 R. w, e

2 F  \$ n% l; Q15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
  B6 M6 s/ f5 @& s( Y* v, iselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
/ L- q2 ~: ^7 x* I' v( w5 e$ z5 C8 R) |- _' F
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
, }+ O- E$ w8 L" s: q: O(select a from tableA ) except (select a from tableB) except (select a from tableC)8 P" Q) k* |8 {2 t' v5 D. L

' s- O: x$ A! D1 m7 B& U- [17、说明:随机取出10条数据
4 n3 h2 f6 o" bselect top 10 * from tablename order by newid()
: d4 f! n, d, U! I: r  U) z+ {- f: L, ^9 U  B% O
18、说明:随机选择记录
: G% x) m6 W' Z! ^select newid()
/ P2 [) p7 i2 U/ h4 V: |/ r2 u
( i' g8 d9 |/ b, V19、说明:删除重复记录) |4 J; [; R/ a; D
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
+ ^1 k1 A$ C; [* a% z" ]0 @7 o" T8 |; G* v
20、说明:列出数据库里所有的表名
) s0 U1 g/ |- B9 K, M5 l! vselect name from sysobjects where type='U'
; P& x/ M! {9 ]2 V6 r- g' D; G  C4 W% T( N5 Q9 J( F
21、说明:列出表里的所有的
" Y# C  K* Z2 B, x' s* l8 T: \5 Iselect name from syscolumns where id=object_id('TableName')3 l7 l* J, B9 m+ x

" w: p3 L% f: x9 S' x- f5 Q22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。( T  [# A$ K+ \, G% j5 _2 w
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
( U) K* l2 s$ v& F7 ]4 M0 K% L# T显示结果:: c% |/ T5 @0 L% F8 e0 b
type vender pcs
* R5 l" b3 r5 }9 n电脑 A 1$ v) Z' P% V5 f* |
电脑 A 11 _4 {$ F' I/ T
光盘 B 2
( M% F: z) ]( P* s- ]: W8 L# a光盘 A 28 L1 s$ A6 M. v; _! X0 D
手机 B 3$ X6 D7 q$ s, z" J( g) e
手机 C 3$ C% ~& I! _3 k  z# Z
+ n8 g2 K1 i1 w
23、说明:初始化表table1
3 Q$ r( E* T- jTRUNCATE TABLE table1
" l; c1 ]& o6 t* J
4 `# y3 Q# h2 X% e8 ]  M24、说明:选择从10到15的记录
$ q1 K# Y& V0 ], ~  X- k; Jselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-11-21 11:14 , Processed in 0.023001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部