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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-4-5 13:24:44 |只看该作者 |倒序浏览
SQL分类:2 f* Z/ f" K4 ?9 M" L
DDL―数据定义语言(Create,Alter,Drop,DECLARE)' }. V8 k& z+ n( m/ y2 S
DML―数据操纵语言(Select,Delete,Update,Insert)
7 n0 w/ q3 s  @" y6 J# g$ ^( H% jDCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)+ Z% T4 k# q! H( Q: g
% ?! B( y8 [/ f
首先,简要介绍基础语句:
* P% z5 ^1 b1 v% `6 a  |1、说明:创建数据库3 Q6 `9 T0 k9 z/ v, q0 w$ I3 S
Create DATABASE database-name
0 a0 V# j! D4 h( e( w( k& L7 i2、说明:删除数据库; E/ [5 q) h# u) m
drop database dbname
) J8 \( L" z% n; [3、说明:备份sql server
" u; Y  n- W9 z0 |3 N% G--- 创建 备份数据的 device
/ z2 z2 g6 i. n+ [2 T* \0 tUSE master' z# N7 y5 F. A. d, d  I% Y2 W
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
+ \5 Q$ x+ n0 N" \8 I, U, ]6 ^--- 开始 备份
+ n% J. i" z& i8 h5 kBACKUP DATABASE pubs TO testBack
- X0 I/ c* n6 ~( w4 O! _; n4、说明:创建新表. }. M2 O; e' g' ^
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
8 n/ ^4 U4 j( z6 b# x根据已有的表创建新表:1 ]; [4 j' l% R( u& y% `$ ]0 P" m8 K
A:create table tab_new like tab_old (使用旧表创建新表)1 [( U" l4 P  C4 F9 i$ L& V# q
B:create table tab_new as select col1,col2… from tab_old definition only
7 }4 D5 n. e) w  K2 k5、说明:删除新表1 U  B6 O  p2 z/ j, [
drop table tabname
: U6 r! N1 \& ]2 G6、说明:增加一个列
* I5 I; ?3 O/ v6 cAlter table tabname add column col type
+ J/ w+ F" D9 m注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
; X% H; K, W1 f% {& V7、说明:添加主键: Alter table tabname add primary key(col)$ y  ]8 @9 K( C1 t# b- F1 P3 E; W7 o
说明:删除主键: Alter table tabname drop primary key(col)
6 J! k: ~: c* l# |7 I% |8、说明:创建索引:create [unique] index idxname on tabname(col….)& b' q* C" v, `  k7 S: w2 g  B" a
删除索引:drop index idxname9 E6 R: [: V4 Z5 k8 K$ W
注:索引是不可更改的,想更改必须删除重新建。* K$ Z, n% Z; `0 Q+ U
9、说明:创建视图:create view viewname as select statement
# ^* ?* G( `0 @* E- b6 k删除视图:drop view viewname
! d% Q* k8 D' {) H/ i10、说明:几个简单的基本的sql语句: o3 G7 ~7 u5 c
选择:select * from table1 where 范围
9 z) \( O0 d. D5 X* t. c$ Y3 E插入:insert into table1(field1,field2) values(value1,value2)
0 _7 B. M: L' z! B4 v+ o1 H# [$ e删除:delete from table1 where 范围
" v8 f6 U9 H" _' b6 |* x' J5 R更新:update table1 set field1=value1 where 范围
' D9 x7 V# `4 ^" w# J2 {. n查找:select * from table1 where field1 like ’%value1__’
  G4 r% z: \2 V* P5 ~排序:select * from table1 order by field1,field2 [desc]
6 h: J3 L# F) K1 n总数:select count * as totalcount from table17 y. e$ m8 U+ x$ F+ U
求和:select sum(field1) as sumvalue from table18 j% x$ E' g& e, h( l
平均:select avg(field1) as avgvalue from table1
, I3 ]" y! A- s! V* t最大:select max(field1) as maxvalue from table1$ [( a  N8 |9 @3 q1 m2 o0 w) C! Z
最小:select min(field1) as minvalue from table14 |* O* S1 p* i& @8 [
11、说明:几个高级查询运算词
6 ?$ K! K" t6 \& s( {A: UNION 运算符
, H* {  K7 ]  ~  fUNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
) i) S  ^9 Y1 @B: EXCEPT 运算符& `% L+ p, y; i- h" Z* U4 B
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
5 G* t) F+ v2 V. L8 C4 ^6 p! }C: INTERSECT 运算符
5 Q7 U- b7 u$ b! C5 M2 ~6 J3 ?INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
& U( E0 U1 i7 x9 L* h4 |0 a: H注:使用运算词的几个查询结果行必须是一致的。
2 S, j$ y" c" L* r  f" q: P& r* t# Q* J4 i7 `# W% |' R
12、说明:使用外连接5 e, A/ E0 q1 X$ q. l4 u& I+ g
A、left outer join:. }1 n2 Q0 y) c3 K$ J6 B: p# w2 S9 w& q+ o
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。  g& E( m" J) Y+ ?; r
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c4 Y; c8 }" x9 E# e( X
B:right outer join:
; E4 y; _$ B6 c& P0 h  r% Y- W6 R右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
3 ?+ `* I9 l' e5 m- N8 o6 |C:full outer join:
) t& j) d9 E' l0 c, a3 N) K" P全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。8 [3 v, F5 {( H+ z/ w6 @  d

/ Q, L$ m$ I3 J& t$ L9 \, n其次,大家来看一些不错的sql语句  d- }5 }1 y  r+ _4 a8 b, x+ k, b
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
) X5 a6 [" B8 d$ r, W法一:select * into b from a where 1<>1
; x3 h9 k  Z; [  ?法二:select top 0 * into b from a
! B( Z, V. n8 R: v  v) S/ p6 H* v
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)) B7 r6 ]# R3 }# W, f
insert into b(a, b, c) select d,e,f from b;
/ A1 a: ~: ^. g+ E& p) |  d3 y4 e4 b3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
( j2 S/ U1 X4 ^* ninsert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件* q( Y0 ?7 C) r; \2 I% P# ~2 `
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..5 @& n$ L+ [2 |+ T& y+ b
# C- ^, K* b& c+ O- H/ e6 o9 S
4、说明:子查询(表名1:a 表名2:b): t+ ^; J# W3 r' u+ d
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)
: H, N9 @4 u8 y* s
& X( ~( S2 f3 F; V/ D. c6 F9 ~5、说明:显示文章、提交人和最后回复时间
7 R9 _7 d; P0 F; kselect a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9 W' H$ @( ^2 ]9 ?" G, o% y- |1 a

- X+ L3 K/ Z8 p* e6、说明:外连接查询(表名1:a 表名2:b)
; U" L7 V. m1 P# Nselect a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
  a1 h9 `; C, V' U9 K1 g2 J- F. q& f4 P* h' v* s% h& T) e. U
7、说明:在线视图查询(表名1:a )$ l( \* Y  B+ i# R
select * from (Select a,b,c FROM a) T where t.a > 1;; A7 q( T1 g. d5 Q
* r5 L. ^  u9 X5 z. h
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括( Z3 e/ C/ `: j& ~3 @$ |5 \" ?0 u7 @
select * from table1 where time between time1 and time2! i  i7 y* n6 u' V4 O* A
select a,b,c, from table1 where a not between 数值1 and 数值2
9 `2 J* _8 \% E: r! K  D  W# w' H6 O* n* b& b. b( @
9、说明:in 的使用方法
, \* g$ q, O9 G! rselect * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)6 p/ s  [1 s8 y+ e( i6 Q  H
, V' Z3 F+ J5 ?4 w/ n& r+ @( ]. I
10、说明:两张关联表,删除主表中已经在副表中没有的信息2 {' q7 {7 Q) a% b1 m1 T0 E  J( o
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )) p8 o# J# r0 A! x0 E% G
" ^/ s6 x6 Q5 W1 B) v
11、说明:四表联查问题:
" Z& H/ M( a; \7 U$ i0 nselect * 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 .....: P7 z; ^8 J* z! c
7 `$ I6 U: F: d2 n+ f
12、说明:日程安排提前五分钟提醒
: {' ]. C1 K; [7 \( x- qSQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
6 Z' N1 T( A2 L6 @( v% r  y6 P5 p" m7 h% d3 f* A5 S) g
13、说明:一条sql 语句搞定数据库分页6 {3 }& }/ H/ f* l* @/ P' L
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段" f# U6 ^/ W; u9 e
% c; j4 V6 @" U" `% [. l
14、说明:前10条记录2 O2 \% \6 T" \7 Z3 }
select top 10 * from table1 where 范围
- R+ @+ [3 y" c0 s: E$ {9 h9 O: E- \2 N8 @+ Q  V0 k7 C8 M8 ]4 T9 d
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.). @8 a3 z$ y) D
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
' v1 z% g# C0 L  G. ~$ U/ S$ y6 h* F$ h0 B3 i4 q7 w
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
- q  D8 B& C) |4 H2 D7 B& ~' \(select a from tableA ) except (select a from tableB) except (select a from tableC)
5 J( S7 L- K& L2 X8 o$ N* j, Q- K8 x- W( w5 h/ o6 I
17、说明:随机取出10条数据
) o8 C5 }+ p! A5 q4 V- ?select top 10 * from tablename order by newid()
7 t6 w2 W5 o3 ?8 T, @
' d4 _4 I& F2 i/ n0 z- ^* I8 X% l18、说明:随机选择记录
' \2 d2 t2 X8 U  i8 \& ?% I. Tselect newid()
5 L  w- M* t5 \
8 a# @8 q4 n0 j# u19、说明:删除重复记录8 O- e5 v' B+ ]' y3 B6 M
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
' r' u) w- @# e/ a3 \  V7 {5 E- A; m" b/ ^4 h* W( v9 E, u
20、说明:列出数据库里所有的表名/ @( [% Y4 b7 o: d6 s
select name from sysobjects where type='U'
; f. n5 u  J: s5 ^5 l
& U, j' P; `% K6 w4 X  ~21、说明:列出表里的所有的
, J) d8 F$ r: b3 B. \  @+ Bselect name from syscolumns where id=object_id('TableName'): H* e* U* e) i1 W5 X" D; D

7 r3 f# N! u4 n* v0 b22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。  X  N8 C: W! @, t2 u% j. y
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 type7 ?7 F5 i- ]/ u( }+ H
显示结果:
- k7 i! [7 ]8 r4 L- I2 ]5 Mtype vender pcs( ^7 Q: S# ?0 w- Y) `' z
电脑 A 1
# T, g" M' y. N) T8 f+ B* x% F! [; ?电脑 A 1# i! a. o# u6 t' G- b( ^/ R
光盘 B 2) m! s* R# M3 \$ J5 {" g. d
光盘 A 2
: {5 f" T# ~. J# V手机 B 3% }/ u, k9 l) ?) \1 W% f
手机 C 3
2 h! E% L! O. ^' a
, K6 I# g9 r, v! S23、说明:初始化表table1
( o# j' D9 ~- Z5 x  z$ kTRUNCATE TABLE table1
. k4 s% B) `/ ]* Y$ b3 \+ e8 T, Y2 D- j2 s
24、说明:选择从10到15的记录
0 U5 Y# O" P' m% pselect top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-12-1 20:09 , Processed in 0.024001 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部