精讲MySQL 数据库的 SQL 语法参考
时间:2008-04-01 来源:剑心通明
一、资料定义 ddl(data definition language) ?~v&eH
#3Ew-mp
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。 ieP._]Rx
y\_@52c[
1、建表格: '0#bN^?}l
WzJL[x>f0
create table table_name( %\J3N[5:5
column1 datatype [not null] [not null primary key], n4kSakPd
column2 datatype [not null], `{+zDUK#
...); kI=\]:xP5
uiB}BZOL
说明: xtqm%))N9
_<{RBh
datatype --是资料的格式,详见表。 ;@1r *DR
nut null --可不可以允许资料有空的(尚未有资料填入)。 \ycfr>!Z
primary key --是本表的主键。 |WX .8o
~PhT=G8
2、更改表格 8f)k g
vx%d[ (4 x
alter table table_name Rkj?<% ;Gx
add column column_name datatype YMGIY}Sq
J@.by2
说明:增加一个栏位(没有删除某个栏位的语法。 GXQU m~
REO ^<ab
alter table table_name ce.?MSh D
add primary key (column_name) 8s0<=>:>
}"4oKX):rH
说明:更改表得的定义把某个栏位设为主键。 g X)dRkm>
;sa_* X
alter table table_name _TfgCUb,j_
drop primary key (column_name) (i`_#n^
(` z Q
说明:把主键的定义删除。 `qY39C<E
j1xw\_9
3、建立索引 W-?n"]:q0
U!`.C4
create index index_name on table_name (column_name) {t#$,N(
GAx<*k|
说明:对某个表格的栏位建立索引以增加查询时的速度。 i;DYcuZ~
z&i8{# h;
4、删除 a.nOB%`N
r$<M>t1
drop table_name |yj[]}L w
drop index_name S"6+l
/O5gRa
二、资料操作 dml (data manipulation language) dCWD\"O *
"6C7/zN
资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法: y M./2(
imcRmToV
1、增加资料: /\j|5B
F^T^;PY@
insert into table_name (column1,column2,...) I PkL Yf
values ( value1,value2, ...) vK M>nw;G
A0mxf%oe=
说明: {,c0ct?>
y'zgnlqJ
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。 5?~ "D M4
Crw52
2.栏位的资料形态和所填入的资料必须吻合。 &3}t|,0:53
,)
3.table_name 也可以是景观 view_name。 \u `NEb:@
7L]LdtauD
insert into table_name (column1,column2,...) G6$5j<+ k
select columnx,columny,... from another_table %1dp H{ 9
bwD C{3
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。 Y/+DZeR
S;rL=\K
2、查询资料: V& M `F,
1W(.K:
基本查询 xQ;Ac$pe
su\#kNPm
select column1,columns2,... ~K=^X:
from table_name FiW *[,c
}V3 4;L
说明:把table_name 的特定栏位资料全部列出来 0}fdp
Lun#,t
select * _gW A -{Q
from table_name d2qBfT13
where column1 = xxx 4O=3.iaR
[and column2 > yyy] [or column3 <> zzz] t&t/PVj
2fjMq`^F
说明: dU#Qy~#bF
TFrN`:*c
1.*表示全部的栏位都列出来。 g##k^t@
I| %j8U
2.where 之後是接条件式,把符合条件的资料列出来。 ecy4yP.1n
V;NW8yA
select column1,column2 hi;{Tfi
from table_name XEu &3u-Z
order by column2 [desc] (Z&%jmiN7f
X19^i{K_
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大 %YPG~4
fRxdg*JM
排列 YO!"+$;6
>sDorxX{o]
组合查询 vu_%t%R
tliH
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。 7`hSn
]\f5x4sF*
select * 14Y`{8
from table1,table2 e1q)iGl`
where table1.colum1=table2.column1 9lWd{5Y;rr
6#QxnY+}
说明: N9z <{`9x
i p"CnOT
1.查询两个表格中其中 column1 值相同的资料。 Q _sbLH"-
udITY2U^
2.当然两个表格相互比较的栏位,其资料形态必须相同。 G,]m;!P
r%B6V~3
3.一个复杂的查询其动用到的表格可能会很多个。 Bm+](%,
p:G/C&k3
整合性的查询: !.^q;J%3
U2{22Q3
select count (*) 4iO)qct UV
from table_name }WESLpa
where column_name = xxx G<Ig'(fK;
mq#i%L
说明: pU6+N:?
y]?oU"z3
查询符合条件的资料共有几笔。 arp@S?WiG
CFw%0z,L
select sum(column1) -<zs [w
from table_name %&[Xol#\.t
H8 @6=H^o\
说明: a_=#X^\
LO>@o`K
1.计算出总和,所选的栏位必须是可数的数字形态。 -q>e) ]X
.l1#2ja$%
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。 <\-S.Ek
aqb& Ejd$
select column1,avg(column2) [ALy$kz
from table_name pNUE<Wjdp
group by column1 Op+%;|
having avg(column2) > xxx Cu '#V~9{*
|jY^`$z
说明: wd^c@g
eMdxlC=lfb
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。 qSC5%
x[l?d][Mw
2.having : 必须和 group by 一起使用作为整合性的限制。 #" {Zpw
n!V}6PV93J
复合性的查询 t)3=Ik]
!;!o e f
select * {^JJjOD6
from table_name1 p;el| XQFC
where exists ( _~GNb f-u
select * d=;axeRlh
from table_name2 rsb7IZMH
where conditions ) s^ R I
bIz7A4/
说明: d oU&
LQpFV
1.where 的 conditions 可以是另外一个的 query。 Uir_?nU
`=}Hrs nd
2.exists 在此是指存在与否。 vDC -NZ
_ s_o
select * x{O)W(~
from table_name1 rCXz-C 4)
where column1 in ( m[kxjq
select column1 8WJ3:d6
from table_name2 2Jo*R$Y
where conditions ) f@5MNkI(
IS )ensc
说明: o}g/1~_
o[.q1^`(
1. in 後面接的是一个集合,表示column1 存在集合里面。 ip @PRc
lKF4KN`cwO
2. select 出来的资料形态必须符合 column1。 1u ^Q+PK1
I2QUO.uX9
其他查询 u@BDUt3?
$gEQy2# Z
select * 6-Tf_Z,x
from table_name1 m(Z6q0pE+
where column1 like x% ~B1F5fW
+*4UPh} |
说明:like 必须和後面的x% 相呼应表示以 x为开头的字串。 zrN7vB4
q^ng$MB2)i
select * ~/AE$!g
from table_name1 L@_~5S
where column1 in (xxx,yyy,..) dXY0C ab1
Ls5hffocB0
说明:in 後面接的是一个集合,表示column1 存在集合里面。 d+pKH3W/
tw%CwCR5
select * "@'OX) kd
from table_name1 j?;.]_ |L
where column1 between xx and yy ? 9nGm
mxQL]Ks"
说明:between 表示 column1 的值介於 xx 和 yy 之间。 13Vx[i;V
mj8&s=y
3、更改资料: t.0GG>Z#
F;8dSd
update table_name "oL!`\)
set column1=xxx =H,Kas"UZ
where conditoins hE2+^K*
hN]?>tglJ
说明: s "ZX`e
iabj3/>2gJ
1.更改某个栏位设定其值为xxx。 ghUu^u;}
3j 5Q|^(
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。 RA`{v.y
uzVG#S*
4、删除资料: cAsK,|Ua
RN"|YpuD+
delete from table_name K;5"jrBO
where conditions <yIO%<F
%f7gn&-dV
说明:删除符合条件的资料。 Pi y9_
0YXPXwYo
说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下: U27 C>S
W\)eTSLg
(1)如果是access数据库,则为:where mydate>#2000-01-01# rsLOfB,h
`gU*}U><4
(2)如果是oracle数据库,则为:where mydate>cast(2000-01-01 as date) 或:where mydate>to_date(2000-01-01,yyyy-mm-dd) e^9Rya%
在delphi中写成: [%,]DDNT=
*X=A~q:H
thedate=2000-01-01; Wd7}O69>t
query1.sql.add(select * from abc where mydate>cast(++thedate++ as date)); (G07'B<BtH
f n%F
如果比较日期时间型,则为: V[ @+}CD
rHah >JM
where mydatetime>to_date(2000-01-01 10:00:01,yyyy-mm-dd hh24:mi:ss);
#3Ew-mp
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。 ieP._]Rx
y\_@52c[
1、建表格: '0#bN^?}l
WzJL[x>f0
create table table_name( %\J3N[5:5
column1 datatype [not null] [not null primary key], n4kSakPd
column2 datatype [not null], `{+zDUK#
...); kI=\]:xP5
uiB}BZOL
说明: xtqm%))N9
_<{RBh
datatype --是资料的格式,详见表。 ;@1r *DR
nut null --可不可以允许资料有空的(尚未有资料填入)。 \ycfr>!Z
primary key --是本表的主键。 |WX .8o
~PhT=G8
2、更改表格 8f)k g
vx%d[ (4 x
alter table table_name Rkj?<% ;Gx
add column column_name datatype YMGIY}Sq
J@.by2
说明:增加一个栏位(没有删除某个栏位的语法。 GXQU m~
REO ^<ab
alter table table_name ce.?MSh D
add primary key (column_name) 8s0<=>:>
}"4oKX):rH
说明:更改表得的定义把某个栏位设为主键。 g X)dRkm>
;sa_* X
alter table table_name _TfgCUb,j_
drop primary key (column_name) (i`_#n^
(` z Q
说明:把主键的定义删除。 `qY39C<E
j1xw\_9
3、建立索引 W-?n"]:q0
U!`.C4
create index index_name on table_name (column_name) {t#$,N(
GAx<*k|
说明:对某个表格的栏位建立索引以增加查询时的速度。 i;DYcuZ~
z&i8{# h;
4、删除 a.nOB%`N
r$<M>t1
drop table_name |yj[]}L w
drop index_name S"6+l
/O5gRa
二、资料操作 dml (data manipulation language) dCWD\"O *
"6C7/zN
资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法: y M./2(
imcRmToV
1、增加资料: /\j|5B
F^T^;PY@
insert into table_name (column1,column2,...) I PkL Yf
values ( value1,value2, ...) vK M>nw;G
A0mxf%oe=
说明: {,c0ct?>
y'zgnlqJ
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。 5?~ "D M4
Crw52
2.栏位的资料形态和所填入的资料必须吻合。 &3}t|,0:53
,)
3.table_name 也可以是景观 view_name。 \u `NEb:@
7L]LdtauD
insert into table_name (column1,column2,...) G6$5j<+ k
select columnx,columny,... from another_table %1dp H{ 9
bwD C{3
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。 Y/+DZeR
S;rL=\K
2、查询资料: V& M `F,
1W(.K:
基本查询 xQ;Ac$pe
su\#kNPm
select column1,columns2,... ~K=^X:
from table_name FiW *[,c
}V3 4;L
说明:把table_name 的特定栏位资料全部列出来 0}fdp
Lun#,t
select * _gW A -{Q
from table_name d2qBfT13
where column1 = xxx 4O=3.iaR
[and column2 > yyy] [or column3 <> zzz] t&t/PVj
2fjMq`^F
说明: dU#Qy~#bF
TFrN`:*c
1.*表示全部的栏位都列出来。 g##k^t@
I| %j8U
2.where 之後是接条件式,把符合条件的资料列出来。 ecy4yP.1n
V;NW8yA
select column1,column2 hi;{Tfi
from table_name XEu &3u-Z
order by column2 [desc] (Z&%jmiN7f
X19^i{K_
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大 %YPG~4
fRxdg*JM
排列 YO!"+$;6
>sDorxX{o]
组合查询 vu_%t%R
tliH
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。 7`hSn
]\f5x4sF*
select * 14Y`{8
from table1,table2 e1q)iGl`
where table1.colum1=table2.column1 9lWd{5Y;rr
6#QxnY+}
说明: N9z <{`9x
i p"CnOT
1.查询两个表格中其中 column1 值相同的资料。 Q _sbLH"-
udITY2U^
2.当然两个表格相互比较的栏位,其资料形态必须相同。 G,]m;!P
r%B6V~3
3.一个复杂的查询其动用到的表格可能会很多个。 Bm+](%,
p:G/C&k3
整合性的查询: !.^q;J%3
U2{22Q3
select count (*) 4iO)qct UV
from table_name }WESLpa
where column_name = xxx G<Ig'(fK;
mq#i%L
说明: pU6+N:?
y]?oU"z3
查询符合条件的资料共有几笔。 arp@S?WiG
CFw%0z,L
select sum(column1) -<zs [w
from table_name %&[Xol#\.t
H8 @6=H^o\
说明: a_=#X^\
LO>@o`K
1.计算出总和,所选的栏位必须是可数的数字形态。 -q>e) ]X
.l1#2ja$%
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。 <\-S.Ek
aqb& Ejd$
select column1,avg(column2) [ALy$kz
from table_name pNUE<Wjdp
group by column1 Op+%;|
having avg(column2) > xxx Cu '#V~9{*
|jY^`$z
说明: wd^c@g
eMdxlC=lfb
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。 qSC5%
x[l?d][Mw
2.having : 必须和 group by 一起使用作为整合性的限制。 #" {Zpw
n!V}6PV93J
复合性的查询 t)3=Ik]
!;!o e f
select * {^JJjOD6
from table_name1 p;el| XQFC
where exists ( _~GNb f-u
select * d=;axeRlh
from table_name2 rsb7IZMH
where conditions ) s^ R I
bIz7A4/
说明: d oU&
LQpFV
1.where 的 conditions 可以是另外一个的 query。 Uir_?nU
`=}Hrs nd
2.exists 在此是指存在与否。 vDC -NZ
_ s_o
select * x{O)W(~
from table_name1 rCXz-C 4)
where column1 in ( m[kxjq
select column1 8WJ3:d6
from table_name2 2Jo*R$Y
where conditions ) f@5MNkI(
IS )ensc
说明: o}g/1~_
o[.q1^`(
1. in 後面接的是一个集合,表示column1 存在集合里面。 ip @PRc
lKF4KN`cwO
2. select 出来的资料形态必须符合 column1。 1u ^Q+PK1
I2QUO.uX9
其他查询 u@BDUt3?
$gEQy2# Z
select * 6-Tf_Z,x
from table_name1 m(Z6q0pE+
where column1 like x% ~B1F5fW
+*4UPh} |
说明:like 必须和後面的x% 相呼应表示以 x为开头的字串。 zrN7vB4
q^ng$MB2)i
select * ~/AE$!g
from table_name1 L@_~5S
where column1 in (xxx,yyy,..) dXY0C ab1
Ls5hffocB0
说明:in 後面接的是一个集合,表示column1 存在集合里面。 d+pKH3W/
tw%CwCR5
select * "@'OX) kd
from table_name1 j?;.]_ |L
where column1 between xx and yy ? 9nGm
mxQL]Ks"
说明:between 表示 column1 的值介於 xx 和 yy 之间。 13Vx[i;V
mj8&s=y
3、更改资料: t.0GG>Z#
F;8dSd
update table_name "oL!`\)
set column1=xxx =H,Kas"UZ
where conditoins hE2+^K*
hN]?>tglJ
说明: s "ZX`e
iabj3/>2gJ
1.更改某个栏位设定其值为xxx。 ghUu^u;}
3j 5Q|^(
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。 RA`{v.y
uzVG#S*
4、删除资料: cAsK,|Ua
RN"|YpuD+
delete from table_name K;5"jrBO
where conditions <yIO%<F
%f7gn&-dV
说明:删除符合条件的资料。 Pi y9_
0YXPXwYo
说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下: U27 C>S
W\)eTSLg
(1)如果是access数据库,则为:where mydate>#2000-01-01# rsLOfB,h
`gU*}U><4
(2)如果是oracle数据库,则为:where mydate>cast(2000-01-01 as date) 或:where mydate>to_date(2000-01-01,yyyy-mm-dd) e^9Rya%
在delphi中写成: [%,]DDNT=
*X=A~q:H
thedate=2000-01-01; Wd7}O69>t
query1.sql.add(select * from abc where mydate>cast(++thedate++ as date)); (G07'B<BtH
f n%F
如果比较日期时间型,则为: V[ @+}CD
rHah >JM
where mydatetime>to_date(2000-01-01 10:00:01,yyyy-mm-dd hh24:mi:ss);
相关阅读 更多 +