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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:) H$ F! ^% [2 q2 g/ v/ {  S% o
DDL―数据定义语言(Create,Alter,Drop,DECLARE)
& i, x& y, W1 B! {' _DML―数据操纵语言(Select,Delete,Update,Insert)" p* M4 F% [9 e% n
DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK). r6 X$ O- ?4 V1 ^1 U
8 H5 ?' l% y: i& a
首先,简要介绍基础语句:) u+ t9 g1 O6 F/ k5 @
1、说明:创建数据库: \( b6 o) S6 q# G
Create DATABASE database-name
6 O& L- M8 d3 ?0 B0 f6 A2、说明:删除数据库
3 `7 y( Q$ D+ g2 r# v0 w% e+ vdrop database dbname
7 F5 v) W1 @3 v- F8 I3、说明:备份sql server
4 L8 t0 y! z' }" L. J--- 创建 备份数据的 device0 S' V8 R$ l. K3 m& j
USE master" C6 R4 i& J+ q/ s# E! L
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
2 D7 K. u& M9 Q. a--- 开始 备份
0 c% A; ?9 r$ W( kBACKUP DATABASE pubs TO testBack
$ z4 K9 w* }( ^$ Y/ d/ `4、说明:创建新表
% j2 X& V/ Z! {6 Ccreate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)& P5 K) D: t6 S7 I
根据已有的表创建新表:  S6 C/ n3 @( o9 R( Y
A:create table tab_new like tab_old (使用旧表创建新表)9 l5 K0 D4 T4 j# a$ Z  y% G
B:create table tab_new as select col1,col2… from tab_old definition only
  h# _) n9 X4 U0 P5、说明:删除新表: g0 c6 {7 |" u! ~
drop table tabname
7 z* U( k  o& j3 U6、说明:增加一个列
0 |4 w0 B9 P8 ^/ R- {9 OAlter table tabname add column col type7 W6 t# c% a( R- P$ ]; ^
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。/ h/ I9 g  s# c( n9 T
7、说明:添加主键: Alter table tabname add primary key(col)
  c9 ]- M5 S, w说明:删除主键: Alter table tabname drop primary key(col), H: q& O# x' a1 |% h8 M
8、说明:创建索引:create [unique] index idxname on tabname(col….)
, u+ n9 W3 ~: U6 j; w3 W: S删除索引:drop index idxname. D7 g6 j& v& p; W! N
注:索引是不可更改的,想更改必须删除重新建。
/ d/ n; S, K) E( ^( I* O9、说明:创建视图:create view viewname as select statement8 o8 B4 c. U( P. F1 L# A& J
删除视图:drop view viewname
1 G5 F' {# q: U5 w+ I4 O10、说明:几个简单的基本的sql语句4 ]$ w/ r1 T/ d2 t$ ^
选择:select * from table1 where 范围
: Y0 _  v$ h  T3 _& ^插入:insert into table1(field1,field2) values(value1,value2)
" I7 l: k% f& [6 g删除:delete from table1 where 范围
' Z! x; Y1 Z3 `) p! B3 y) }更新:update table1 set field1=value1 where 范围
/ ?0 V4 ^* [) }6 s$ p* h查找:select * from table1 where field1 like ’%value1__’
+ j. l! d/ }( q9 L$ P; x0 r# l排序:select * from table1 order by field1,field2 [desc]
  x3 _7 k- H8 J& q, b; F. O总数:select count * as totalcount from table1: ?* m$ o& i2 E7 k6 O. F* v0 r7 r9 @
求和:select sum(field1) as sumvalue from table18 V# P4 e, O- S$ H: _
平均:select avg(field1) as avgvalue from table12 T* t6 d) w& X* M/ X$ s* o* P
最大:select max(field1) as maxvalue from table1/ a- C" k" w$ \+ d+ k
最小:select min(field1) as minvalue from table1
: b0 P$ G# N# I- ]2 T# S11、说明:几个高级查询运算词
6 |! q: w2 _" c0 Z8 `, h! ~A: UNION 运算符
" p, y  l( [) W' ^# dUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
2 Q/ N9 T8 b8 M4 V0 F2 t) _B: EXCEPT 运算符
  s: }: e- j& g( c- \EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
. [/ f. h' X0 q" l6 r3 @C: INTERSECT 运算符; {% P8 W% ], A% t3 p  E
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
7 o# S% q: O/ A注:使用运算词的几个查询结果行必须是一致的。( |7 T1 \& `# L

9 F/ I, K! T; _% G! X2 J' S12、说明:使用外连接
" k" x( Q; n3 ]) g6 Z8 W* n# EA、left outer join:
+ ?" D6 i9 ^2 ?! G7 h左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
+ B- k4 M3 g* l7 jSQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c8 w: c" d+ k7 t7 G9 v
B:right outer join:. T5 I2 a; |/ W6 D
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
& v* T0 K! D' k' u# TC:full outer join:* R) U, V4 a. {
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
, x3 n( O1 W+ k& k/ R
6 A+ H+ @( E) q$ H其次,大家来看一些不错的sql语句! p, ]7 H! w( J$ ?0 L
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)4 x$ v" Q$ |9 s( R8 T$ Q% V1 e
法一:select * into b from a where 1<>1: _5 I6 e) ~! l5 |3 C8 M) P! P, h
法二:select top 0 * into b from a
% O% }+ Y  g9 |8 T2 m3 g
# Q8 K/ p: r+ b# z2 ~% `1 @- z; L2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
1 [5 n& }. |( j  r6 v* ~% ]! vinsert into b(a, b, c) select d,e,f from b;
6 a, ]2 B3 V) S, D7 X* m4 e3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
3 {  I4 A: ]$ ?8 Xinsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
! Y$ A, s5 d3 h9 M% X例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
$ x; ?3 Q3 E, g- M" f, A0 P  J" D+ A4 w3 X
4、说明:子查询(表名1:a 表名2:b)% ?1 |! T5 k  k/ w7 ~2 j6 J, S
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)
( a2 Q( N8 o( o2 C1 q
6 S& E: Y) V; m7 V$ a1 V6 J5、说明:显示文章、提交人和最后回复时间6 K! T+ A. ], j. `( }' l, t  w
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
2 D9 h- o# y& w& w% k: w2 }! \/ l4 D6 h0 z1 {# w: V$ G  t6 j% Y5 z3 F
6、说明:外连接查询(表名1:a 表名2:b)
9 P/ V: z! \1 Q+ Y' Vselect a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
: V) @  z- m& \8 i% q" k
- g! i7 o7 r3 z7、说明:在线视图查询(表名1:a )& O# Z- M; Q3 m9 n7 E, z  W
select * from (Select a,b,c FROM a) T where t.a > 1;  x2 h* E! U+ R' R  D1 _1 v3 M

9 \/ I6 W4 X) h% I6 c, t, q% ?& b" B8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
* L2 [- w: b# ^3 }select * from table1 where time between time1 and time2
' M  S/ o/ ]3 {, s* J6 M: Iselect a,b,c, from table1 where a not between 数值1 and 数值2
. A; }* |5 v7 D. y' F$ k2 U3 k
7 ?; ~8 R8 w. Z* T9、说明:in 的使用方法# k+ Q) u) O+ u; J  v
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
( `8 K5 r  L* I  [" t. A1 S) J' q+ k6 a) m) f5 j8 f( F
10、说明:两张关联表,删除主表中已经在副表中没有的信息9 ~0 ^; Y. T, [% U
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
  O+ h* s+ x) P, A
8 R8 W3 a& ?; F) A3 [, J" N11、说明:四表联查问题:
1 C. J# N, x) d5 ^7 c; sselect * 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 ...../ i: |$ a" B7 M0 b( V6 ~
# `, U4 k1 k* T' z' F# L
12、说明:日程安排提前五分钟提醒
! ?1 Z4 r0 S8 E2 V  x+ hSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
4 a5 E8 p8 I1 f6 {- Z8 }8 H: x: _1 K* V; W# {: k' O' W3 K. A
13、说明:一条sql 语句搞定数据库分页6 {+ r" N6 D2 z8 A* x! \7 R
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
2 f3 m1 b* T2 O' c* E! {8 p4 e! X3 W6 |$ p; F; w5 t, n
14、说明:前10条记录- P6 u6 L, e( a5 l# y& s4 y
select top 10 * from table1 where 范围
+ G8 n- n+ Z( K. I& a& v- w
4 R4 P1 s& ]- y: a" Q* {15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
5 [/ `2 `6 f" e; rselect a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)" _& ?  z  O3 C7 U/ j
' V* k4 I2 l' c0 N
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表$ }# ]& w0 x' P$ {% G+ a/ w
(select a from tableA ) except (select a from tableB) except (select a from tableC)
/ R: F5 F7 {4 @: z: w4 l- ~
/ Q3 x9 G0 w6 j17、说明:随机取出10条数据5 U1 T6 U: h/ D7 k, b" D
select top 10 * from tablename order by newid()
- B! Q  Z2 F8 D. f. w/ B0 K& }, D- T6 i* }
18、说明:随机选择记录
& R( ?6 ^' p8 oselect newid()
; c! X4 [, r3 B/ |, G) P
# z' u% E. u# R: i: n, f19、说明:删除重复记录
& B8 V1 w, Y1 U- [Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
0 N1 o# S' L# i; ^/ m% Y6 K; P$ O+ F, g0 O: v; m" R
20、说明:列出数据库里所有的表名3 C8 L0 R  X  m% }3 k& i) O
select name from sysobjects where type='U'" M/ }% n  P) Q* o) w8 E

7 z! f+ h- i/ }- o$ y21、说明:列出表里的所有的! D4 d( L, b* b! ]
select name from syscolumns where id=object_id('TableName')2 Q1 z* W, Y# E$ n

% k) D; s! g: q3 |# p22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。1 n  W6 f" o& w3 Z2 M
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& i' ]- H! m( ~7 @/ M0 t9 D2 p/ Q
显示结果:# ?: _9 e$ j8 U( d  H% \
type vender pcs
* A9 {% Y2 D( l: a* w4 W0 b电脑 A 10 [$ L9 D/ ~: p9 M$ V5 z& g
电脑 A 18 o+ V5 L6 o+ r0 f
光盘 B 24 J5 _$ k6 e" i! k6 ?8 i0 ~* [
光盘 A 2
  k7 K) p+ a% W/ a: a手机 B 3: q$ _5 s+ a/ Q& |
手机 C 3
& P, l" T' D6 b6 I* I2 w
0 G; i( M; L# s( Z  \2 X8 F23、说明:初始化表table1
* q6 T0 z) ?. _+ Z1 c4 LTRUNCATE TABLE table1! N2 _9 q/ R) v' C3 X5 l# X
' p4 A, o; O4 T! t$ R2 \
24、说明:选择从10到15的记录
/ j  t" s+ q3 l7 e$ \8 Xselect 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 08:42 , Processed in 0.024001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部