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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:
/ W5 _4 O( v  K0 pDDL―数据定义语言(Create,Alter,Drop,DECLARE)
5 _$ N( |0 m9 ~: @DML―数据操纵语言(Select,Delete,Update,Insert)# ], R3 u( L. ~# g, M* ]
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)5 d% L2 z2 P4 G
/ ^4 H2 x0 R* F; }
首先,简要介绍基础语句:
9 v% t5 I: m; {7 H* I- K* I1、说明:创建数据库7 l! w& o7 p/ t; |  M6 ?9 w$ m/ F
Create DATABASE database-name$ j0 Z1 M- f2 u3 z4 [- i
2、说明:删除数据库
/ U$ @5 [; K' ^# @drop database dbname
5 ]" h( |) d, q, A/ d3、说明:备份sql server! C) H( e' O' b9 k; u' B- m
--- 创建 备份数据的 device
1 c0 Z5 y; @8 @( d7 Y/ iUSE master
: [7 r0 l$ G9 w0 ?, t2 A% t3 oEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat') O. p0 ^! x* c2 x+ z
--- 开始 备份; L% W/ g  I$ i
BACKUP DATABASE pubs TO testBack( B" Y. U9 H$ }& t  Z
4、说明:创建新表
- i$ F$ _: u* i* F$ Screate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
; r( z& V' ?$ H0 Q( A8 Z+ Q. ?根据已有的表创建新表:
+ Q5 I  ?2 G. _A:create table tab_new like tab_old (使用旧表创建新表)9 U3 P6 ]( @7 J
B:create table tab_new as select col1,col2… from tab_old definition only9 m6 g; W( j1 z3 ^" V$ |8 p" T2 ?
5、说明:删除新表6 r$ n" C' C& a5 w/ F- X
drop table tabname) R6 j0 {, y5 i
6、说明:增加一个列
. q: y; I( u* d- {. oAlter table tabname add column col type
/ j9 \# T' S6 `! S1 I注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。( {6 r6 [  ]0 F7 x
7、说明:添加主键: Alter table tabname add primary key(col)) s$ i/ _( |7 G
说明:删除主键: Alter table tabname drop primary key(col)9 I8 |# k( j% P( k: ^
8、说明:创建索引:create [unique] index idxname on tabname(col….)5 e* F* Z0 a0 s+ u
删除索引:drop index idxname2 U( |% ~5 C2 o$ Q3 [
注:索引是不可更改的,想更改必须删除重新建。" k* R) Y% G, N7 C# f- n# Q! d" R$ r
9、说明:创建视图:create view viewname as select statement: h' o% ^# \) P: n' S* [
删除视图:drop view viewname/ G: m# z* \. l% j4 ~* R1 d- @
10、说明:几个简单的基本的sql语句
: Y" H5 u5 _4 K, t0 e选择:select * from table1 where 范围
+ K2 l$ x  Y$ W( s插入:insert into table1(field1,field2) values(value1,value2)( O9 M2 \5 B' L* ^2 [+ U( i& Q3 [
删除:delete from table1 where 范围
5 [. ]; @# N5 {* v3 G. D4 E更新:update table1 set field1=value1 where 范围
$ W9 f' a. |/ i' G( F$ b查找:select * from table1 where field1 like ’%value1__’
! D% Y3 R* a- N. |" D, {1 j排序:select * from table1 order by field1,field2 [desc]
, S- M, U4 X& v  N: I总数:select count * as totalcount from table15 F' u( e9 `& f9 _
求和:select sum(field1) as sumvalue from table1* B! X1 B3 H2 p( m$ j! `8 I
平均:select avg(field1) as avgvalue from table1
" `/ B; d- K, v# X( ~% e8 i最大:select max(field1) as maxvalue from table1
+ ?1 Z8 K- r+ M6 z1 x最小:select min(field1) as minvalue from table1: [  v! @+ \3 B- W: c
11、说明:几个高级查询运算词
: v/ V" ^% |: t& YA: UNION 运算符* @' M* g; b5 [; o5 k3 l9 z. {- @
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
1 `% y, Q2 q& tB: EXCEPT 运算符
! f; G' }" H( V/ i3 _$ @9 wEXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
. I* m  \- r2 o, a! z6 _C: INTERSECT 运算符# L- E. G% ?  A  I
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。/ A  O1 B6 M' r5 @
注:使用运算词的几个查询结果行必须是一致的。
1 G+ U% x# C6 U  L
1 k) i% ~$ X% c3 \12、说明:使用外连接# W& }7 ~- E  i. b
A、left outer join:
7 ~, x% m, t6 S左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
2 a  n& |7 ^- h  W' 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
9 @7 R6 O2 z- }+ X) \B:right outer join:0 x& L# ^5 Z! {
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。2 i/ u  E! m/ J9 T% B! K
C:full outer join:1 P9 @- u3 W% u7 v& W  z
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
. g! P. g- i3 u/ G6 V/ i: o2 z. H$ E3 L2 E& b
其次,大家来看一些不错的sql语句; R1 E1 _8 ~% z5 d1 u* ]% b
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
8 G0 I2 ~' q. a4 Q' J( ]2 g法一:select * into b from a where 1<>1
0 X6 Z/ B. R7 Q# m' A1 H" H2 p法二:select top 0 * into b from a
% H" c4 @+ X$ @5 v3 h2 a* W0 O$ g4 v0 a, o& P2 |. W
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用). `$ R0 N8 O) g8 P
insert into b(a, b, c) select d,e,f from b;
& U9 `) g0 D- w$ u4 S8 t3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
' F& W6 O- a/ v0 ginsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
1 i4 L  a  ]7 O. P* w; v" W8 k例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where../ \: k1 ]* ]+ E. A0 J; i

) K# |, T0 T3 g+ D4、说明:子查询(表名1:a 表名2:b)
' m+ u4 O  z; Y+ {/ _: eselect a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)0 U9 F% |0 i6 R# K1 F
% @, E9 t6 H8 a9 b" r# A! b
5、说明:显示文章、提交人和最后回复时间
4 D) L7 [5 t8 `  m; W  `select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b. X, W6 `- w: V  Z

( A1 b5 i7 q1 o$ `6、说明:外连接查询(表名1:a 表名2:b)4 c& a' S  P. k9 P( X
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
. Z& d8 C# A+ }
) O0 B  C* f* O) P& Z4 p5 r7、说明:在线视图查询(表名1:a )
6 W. n/ r9 Z. `, yselect * from (Select a,b,c FROM a) T where t.a > 1;9 d! J6 b. E) _! ^& c' n3 v
" G& T3 f) [5 z, x5 `1 N
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括- k7 e( G; h4 L6 M# k
select * from table1 where time between time1 and time2
- J/ Y) A+ J4 Iselect a,b,c, from table1 where a not between 数值1 and 数值2
" i! K. _% I% G( z/ n- T
% o0 A8 B4 _# @+ d* b9、说明:in 的使用方法
% K1 A: n  A, S7 Z" rselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)+ D5 e5 k% b; h6 C; C  @1 g

4 T2 j3 ?: a. B5 @1 H+ q10、说明:两张关联表,删除主表中已经在副表中没有的信息. B& q: l- {6 K: h
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )6 p6 a  l, m2 y: V
: p' d2 W, r9 K; W1 |
11、说明:四表联查问题:
( O/ J! |8 c/ R( k, Cselect * 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 .....3 G* Q( F: r* Q' }% q7 @$ |

+ ?) L1 ]% D% |/ R12、说明:日程安排提前五分钟提醒/ i, H3 z9 g/ g: w: a0 Y, Z
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5' Z7 `: D4 t) ~* Z# r& d3 x

4 q, W0 i- G7 f9 g* z% v# Y  n13、说明:一条sql 语句搞定数据库分页
3 n$ ^8 _5 e+ ~; ^" Yselect top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段: B7 P$ C; R$ b. K

8 `: k- c% |" r' ~- \2 B14、说明:前10条记录3 g) C3 z9 a! |% q- W
select top 10 * from table1 where 范围
2 p  P, G) b( h3 q$ ]* o
' V7 k- J* F) T+ o1 v  w+ M3 q0 W15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)2 Q5 T3 ^- \, q2 d2 a( J+ j& Z! o- d
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
9 \. @( |  C  ^6 r! v/ s
9 e' M  B5 T5 q6 q7 S16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
1 O( E* k& H" q+ s% x(select a from tableA ) except (select a from tableB) except (select a from tableC)
! i7 ~7 ]- I: z: }
' K9 [3 R' ?1 K" A17、说明:随机取出10条数据) r/ @1 R* T9 U2 b1 ]+ W5 e
select top 10 * from tablename order by newid()
' h$ j) Q% W& O: A4 `* i
" p7 U! ^& v/ r+ L18、说明:随机选择记录7 e3 u: p. E0 p9 L' Q- ~6 p
select newid()0 ^  J$ y) K+ W1 }

, P+ {/ e4 f. {5 P: W. Z19、说明:删除重复记录# p- A! d. S, b% g+ \6 S# G7 Z" R
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
/ J, ]# v) t& B! K; i$ a' T1 U) R/ D; k/ L9 D6 i0 p: y
20、说明:列出数据库里所有的表名
% S1 t* i6 A. d& wselect name from sysobjects where type='U'
9 g' [* N' J# i4 P$ _
3 V# ~! ~: h5 A- j0 e: `- q21、说明:列出表里的所有的
2 @9 a, R  {$ {0 Wselect name from syscolumns where id=object_id('TableName')2 \( {# ^! v. K$ U6 E% l

2 h! f6 O, g+ v1 P' s+ ]8 X8 a22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
' H: y+ c" K% X7 Qselect 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; X- P- @2 H6 v3 m! I7 l
显示结果:
! w3 X( G- F* ?% ztype vender pcs
; P% U: O2 Y! L, J& r7 h9 f( Q电脑 A 1( O* B6 y1 T7 S& M1 k1 B
电脑 A 18 w0 H- W. N/ n" o
光盘 B 2- K$ H# ?  P6 ^/ d/ ^& @8 j/ c
光盘 A 2
8 S$ y( V9 |" c# _7 |  C: ~手机 B 37 p  j! k" T# G5 K( H6 h
手机 C 3
) A, Z/ V: W$ h8 s$ k( ~% Q  U/ ]- \  {7 [
23、说明:初始化表table1
0 w" T6 X% p( }6 n! WTRUNCATE TABLE table11 x) Z4 @0 P0 @+ D) z% A

6 A! a6 L# V) G3 @# X24、说明:选择从10到15的记录
# j4 e8 U1 g* E9 ~$ }5 Cselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-9-17 20:31 , Processed in 0.024002 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部