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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:
+ s! h, G2 d- @2 jDDL―数据定义语言(Create,Alter,Drop,DECLARE), G% v' Y4 X: Z1 A8 m! C  b8 W
DML―数据操纵语言(Select,Delete,Update,Insert)' d) Q: N2 B8 F2 o
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)5 X' R/ w/ p& |# `
! ?( I% t2 t9 n4 I
首先,简要介绍基础语句:
$ v3 B! T# K8 |1、说明:创建数据库5 W* V5 y$ m3 r' S/ T
Create DATABASE database-name
9 k9 e7 u: N  p8 A$ v) I+ n' P2、说明:删除数据库3 X+ l! @' c; _) U
drop database dbname0 i9 s/ l4 S: J$ H( T8 P
3、说明:备份sql server
7 i3 q( I3 O( \' j* l8 n7 D--- 创建 备份数据的 device2 I* C( I/ W$ V" P2 k) v
USE master
' P4 f8 T* k9 w3 CEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
/ {* O" J) s1 M: R; p; o: ?--- 开始 备份( Q$ n/ _! C* ~( e
BACKUP DATABASE pubs TO testBack
7 _( A" ~1 ]; V' c4、说明:创建新表1 S$ n! p& j1 b3 S# D  ~4 A
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)" `9 ?0 T6 f; A: W+ Q5 E7 k( e, ?. ^
根据已有的表创建新表:- d# ~9 }' e% @+ k( ^  V* r" V. [
A:create table tab_new like tab_old (使用旧表创建新表); v/ }1 q: _/ F! Z
B:create table tab_new as select col1,col2… from tab_old definition only
. E3 L$ Q9 _$ {4 Y* J) G. C5、说明:删除新表  K: F$ a3 o1 N) [& @+ B; e
drop table tabname
1 \; H0 y4 j( z' k6、说明:增加一个列) N( @# o' z0 G/ @2 B
Alter table tabname add column col type
% n; n6 _5 [2 C. E" u0 ^) T# w4 E注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。' q6 D+ P7 P' L
7、说明:添加主键: Alter table tabname add primary key(col)
/ C9 E+ X5 f7 b$ k) e  c. I9 E说明:删除主键: Alter table tabname drop primary key(col)- O3 y% u7 J- d# k0 Y
8、说明:创建索引:create [unique] index idxname on tabname(col….)+ ~4 I# B8 ]! n+ X# H0 A
删除索引:drop index idxname% v4 k. A' s) }( @+ _1 S+ Q/ Y. v
注:索引是不可更改的,想更改必须删除重新建。
" Q2 \7 |. g9 C4 x3 [1 j' r/ `9、说明:创建视图:create view viewname as select statement. O7 P+ x1 ~. R  k' y
删除视图:drop view viewname
2 m8 {  z% W- b9 y+ T10、说明:几个简单的基本的sql语句
1 Z- U1 n( L& L& s选择:select * from table1 where 范围
  E! I1 Q( T  Y6 U, I& e$ e9 z插入:insert into table1(field1,field2) values(value1,value2)0 z& B  v2 J: ^* i
删除:delete from table1 where 范围
( G, K! X8 O& Y2 }更新:update table1 set field1=value1 where 范围0 U2 {2 ~$ |4 G+ Q( N0 g2 o
查找:select * from table1 where field1 like ’%value1__’
5 ]  s- c5 d6 i9 E1 B5 [9 I排序:select * from table1 order by field1,field2 [desc]
. {# a4 s0 T6 W2 ?% S总数:select count * as totalcount from table13 S1 l$ g0 I8 U4 f' p, q5 ?
求和:select sum(field1) as sumvalue from table13 ~/ x/ \' a9 y8 h) t1 M5 _: X
平均:select avg(field1) as avgvalue from table1* y" E  l0 s, E% G3 j# E2 T
最大:select max(field1) as maxvalue from table16 v" ?% X6 z1 e, O; {
最小:select min(field1) as minvalue from table1
7 N; X. L7 R; x9 C3 \7 e$ s11、说明:几个高级查询运算词, |6 e; y3 u# y2 o3 Z# r0 ^% y! m
A: UNION 运算符
' Q" i5 w" A& }5 @UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
5 |: @6 q, x8 H# S% YB: EXCEPT 运算符/ y. s3 A0 h( c9 s( H! _. a
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。* \' P! X( C4 k+ H7 y0 j4 n
C: INTERSECT 运算符
) P7 J1 W4 `/ U# o! x9 zINTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。$ w  n5 ~/ s( n* p7 \; r
注:使用运算词的几个查询结果行必须是一致的。
( |& T8 l6 V; y7 C
2 o/ \" B$ E: k0 ?! o, q2 c: u12、说明:使用外连接
% ~& A0 Y- P7 |; B! j8 @A、left outer join:) ]0 z- q/ l6 `+ q# J7 w7 C/ u
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
% [  k  X$ ^* d3 N/ j7 M0 zSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
6 d( A- c: u: F7 J: @B:right outer join:
/ F: B# X8 p' x8 \- N右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
8 [1 }9 o; f7 I8 {2 r& o+ q: rC:full outer join:8 B. J7 l, o. n! F7 B
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。9 ]( f" O) ~( p0 b

" m0 w7 E( o% i% N# C3 ^' l其次,大家来看一些不错的sql语句
7 l/ X; O0 h9 V3 {$ I6 j1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)& C0 f3 s+ R5 m3 e
法一:select * into b from a where 1<>1
0 c6 S% a2 `) m5 ]: h法二:select top 0 * into b from a- v( e# q$ ?. ?2 ^2 [
2 ?7 B" A2 S, g. z( z1 a1 r
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
8 z, A) H6 Q9 R& C4 Vinsert into b(a, b, c) select d,e,f from b;
7 T3 E" t! s, i& q4 {4 m2 \3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)1 X- d& C. \, h! h
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
4 I6 R2 t- X: y& \例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
' `2 B9 g2 j6 r' [7 u/ g4 v: j" h9 W" q7 Z- U9 N: X
4、说明:子查询(表名1:a 表名2:b)- ^2 o2 k; Y, v5 r$ T6 G
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)
8 T/ n, o& ]4 b1 [( l/ ~8 |9 h' n$ I) ^
5、说明:显示文章、提交人和最后回复时间' m# e4 y  J( L& Y5 ]* u9 y1 k& U) A
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b8 Q8 v8 f6 m0 T1 ]9 q

( F; z6 h5 \; L, H4 @' U6、说明:外连接查询(表名1:a 表名2:b)5 K" x. c& J! ~2 z( T4 {1 Y
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
& M6 k# V0 n5 x1 w7 K5 b1 U1 n6 q0 ~/ [5 C# T" I- `, N- a
7、说明:在线视图查询(表名1:a )
" c7 R2 _& Q2 C# I7 xselect * from (Select a,b,c FROM a) T where t.a > 1;
6 Z9 X+ ?! [2 I2 B, b3 M/ y1 ~  a+ z
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
2 v) d7 q, I6 r! g8 J. {0 s. e  vselect * from table1 where time between time1 and time2# d; w7 i8 o/ c6 j5 B& Y
select a,b,c, from table1 where a not between 数值1 and 数值2' o. B; |- [/ K0 m) R$ L& f. z, Q

8 F" p2 m- q$ y9 q0 ?# I& E9、说明:in 的使用方法) I! U6 S) l" }6 H  [, n0 D
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
4 r) B/ X4 m4 E6 Y
2 S* `' C; G1 d7 f10、说明:两张关联表,删除主表中已经在副表中没有的信息
: q$ B2 E/ V# G7 Y2 W- D: |delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )5 m+ p6 h% n7 O) [' L4 v# O
5 f% p9 n. ]) G: k
11、说明:四表联查问题:
) @1 d9 ?# I- H0 _5 T3 p8 Gselect * 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* @9 h: f: S/ l; |; E: h8 E2 W; Q) s2 g5 |! q7 Y
12、说明:日程安排提前五分钟提醒
1 @# ]; J. Y$ j7 Y. O4 g) XSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
7 I  N2 t+ |3 n6 y1 k: E! U& y
5 y* [& I( ~" i6 x8 ]13、说明:一条sql 语句搞定数据库分页
' g, E- [' [& k6 y4 |, vselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
" ?& t  J* e- B) s7 C% `9 x5 H" [
2 J/ B" d( e! i! v14、说明:前10条记录
- g  E& T% N" o$ Aselect top 10 * from table1 where 范围5 b0 I: o6 D1 D( f4 u
# b: L9 l+ X$ q: d1 ^
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
4 {4 E* S6 N/ K% Aselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
! ~+ `) _- B8 z. G& I
- K' X2 W9 w" z& d7 ?16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
9 Y0 H- b- g  T* D, G* e(select a from tableA ) except (select a from tableB) except (select a from tableC)
9 G& U0 r) Z. u2 i' L$ s+ w7 d9 K
  r! v! o) r) k5 |0 B17、说明:随机取出10条数据9 K4 i$ w, l( ?% F6 K0 s; d2 B4 F) D
select top 10 * from tablename order by newid()- V. C: X1 a7 c4 P( u5 U+ ]
# d  k$ Q* U/ b8 a9 V* y/ |2 c
18、说明:随机选择记录# I1 D" H! o) ~. N$ w( b
select newid()( A$ W) m% y3 _9 y# O0 G. m

& M6 i# v8 Q+ [5 y19、说明:删除重复记录
4 x9 Z! y  }. H& JDelete from tablename where id not in (select max(id) from tablename group by col1,col2,...): w/ g' J7 {; ?+ X6 D, m, H" V
9 H/ L" a& r7 c  k) W
20、说明:列出数据库里所有的表名1 U3 {* B6 q' @
select name from sysobjects where type='U'  g% a. |) h: n5 z8 v3 y% R
1 ]( `2 ]% b; G
21、说明:列出表里的所有的
* I1 _! D1 K$ Y" a' w3 E4 fselect name from syscolumns where id=object_id('TableName')" Z1 c. L& m0 H8 j" d
0 l9 G9 V" |  S; \/ [3 O$ n
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
/ F4 C4 I+ Z" q, R/ o/ x4 Vselect 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
% H5 b% ?( K* m# R6 U显示结果:
1 |/ `7 r. @# [type vender pcs. u: R3 R/ n/ G  H* K1 C4 b* j; M
电脑 A 19 G0 l& C3 y+ k# {! B5 t- y& a
电脑 A 1
/ H* X8 v& H! f+ F光盘 B 2
* x9 s" c, f0 Q: o, K$ j光盘 A 2
; E5 {* ?; o3 i) q7 e  F手机 B 3+ f5 e  W2 d' ~4 d
手机 C 3& E! x" Q/ h7 b3 c

' J, K3 s: w1 O- ^" ]) v# Y23、说明:初始化表table1
7 I, g4 N% I) _3 |TRUNCATE TABLE table1
; B& ]. I& W- t6 a- q2 \% j1 r4 ?4 B, A7 c2 d) i; @/ t
24、说明:选择从10到15的记录5 b' J/ V$ ?1 X# }# l' l7 c
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-26 19:49 , Processed in 0.024001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部