新手帮助 | 版主申请 | BST制度 | MST制度
返回列表 回复 发帖

[转帖]数据库人员手边系列:SQL语法查询文档(上)

一、SQL速成
* E" I. S! V' ^% [! A" l; k  结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如表、索引、字段等)的建立和操纵。: ~9 s7 K+ x4 J1 n" W. g6 i
  以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册。  8 a/ u" M8 U; h7 j
  1.创建表/ C  T' Z/ l2 d1 Y. \5 u+ O
  表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。创建表的基本语法如下:  7 \' _  L& J; z7 O  T
  create table table_name  5 R& @, f# |) w/ b! ?$ S& J) S
  (column_name data无效 {identity |null|not null},  
+ x, V' t7 q2 N6 m4 I  m# E3 q5 D  …)  % r, Z, t5 e4 d1 Z. x
  其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数data无效是一个标准的SQL类型或由用户数据库提供的类型。用户要使用non-null从句为各字段输入数据。  6 o5 p% i" R3 ~. X; A  K
  create table还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。还有,在创建表是可用PRIMARY KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。  
7 }* g. T2 `3 o' x2 Z  书写上要注意:  
! f' c  F5 f8 @/ X! _  在一对圆括号里的列出完整的字段清单。  4 H0 i+ I1 Z  Y- B! P
  字段名间用逗号隔开。  
: D0 Q4 ~/ g& {* Y+ \% J" H  字段名间的逗号后要加一个空格。  
% y& l' e5 }/ {" U; H  最后一个字段名后不用逗号。  6 y, x2 j& A7 h+ P6 F% _5 r- E: H
  所有的SQL陈述都以分号";"结束。  
7 w& c5 X( w5 G. n  @* W  例:  5 U: k; @, A# `
  mysql> CREATE TABLE test (blob_col BLOB, index(blob_col(10)));  ' F# `0 T* j) w0 t. L. q7 C
  2.创建索引  
% O1 m; D' f4 B% O6 E( i2 |' R. q  索引用于对数据库的查询。一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。索引可以加速对数据库的查询过程。创建索引的基本语法如下:  9 F. I  v6 h% Z9 t2 @
  create index index_name  ! R- L: M. A6 g5 ^9 w2 v3 u
  on table_name (col_name[(length)],... )  
$ l2 }* A# T, R: ]9 V  例:  % j6 c6 l, O  s3 q
  mysql> CREATE INDEX part_of_name ON customer (name(10));  + U- G# Q$ A! t9 I5 B
  3.改变表结构  
' F; ~# O) @- M# Q7 A  在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。可以实现上述改变的命令是alter,其基本语法如下:  " c2 H. o: f5 z& d0 w
  alter table table_name alter_spec [, alter_spec ...]  
1 a3 O' }) \. g) W  例:  
% @2 P. D6 G! L3 ]  mysql> ALTER TABLE t1 CHANGE a b INTEGER;  7 r- I- v. {) H, y8 y
  4.删除数据对象  
, t5 a* P9 B: d3 \  很多数据库是动态使用的,有时可能需要删除某个表或索引。大多数数据库对象可以下面的命令删除:  
4 b& m6 D1 B) T) M& O" X+ @' X  drop object_name  ! w+ ~% x) p6 K' F! `' h
  mysql> DROP TABLE tb1;  - V# v& Z/ K2 j- i( P* P8 ^
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--

[转帖]数据库人员手边系列:SQL语法查询文档(上)

10.表的数据嵌入
( M' w: v+ D( a( D3 G  mysql>insert into table01 (field01, field02, field03, field04, field05) values  * P8 W  ?* M2 |6 L& B
  ->(2, ';second';, ';another';, ';1999-10-23';, ';10:30:00';);  4 u7 G! v8 N2 {# L: a7 \( C
  Query OK, 1 row affected (0.00 sec)  
" j0 @9 |! v& f  标准日期格式是"yyyy-mm-dd"。  
6 p, \$ T& U  U+ v! D  标准时间格式是"hh:mm:ss"。  
( R9 a* n$ }! I( l/ `) H0 @  引号内要求所给的是上述的标准日期和时间格式。  " \  Y9 _3 ?6 r3 |
  日期也可以"yyyymmdd"形式,时间也可以"hhmmss"形式输入,但其值不需要再加引号。  
# p- A  S! A! R4 o+ o& b  数字值不需要加引号。这种保存与数据类型无关,这些数据类型都有格式化的专栏来包含(例如:文本,日期,时间,整数等)。  
' r# Y- v3 W) `4 P+ O7 N) l  MySQL有一个很有用的命令缓冲区。它保存着你目前已经键入的SQL语句利用它,对于相同的命令,你就不必一遍又一遍地重复输入。下一步我
6 ]. o+ k. i" P' F  们就来看这样的一个例子。  
7 n  Y3 z3 [9 r1 ^& z$ Q5 ^  利用命令缓冲区(及任意的日期和时间格式)增加另一个数据  * G- |% {# Y+ B7 V( e! {
  按两次键盘上的向上箭头键。  4 [. p9 v( C, D4 h9 V
  回车。  1 D$ Z+ R( C% A3 H. q
  在圆括号内输入新的值,并以分号结尾。  
& `! a7 P1 ]5 J5 _  (3, ';a third';, ';more';, 19991024, 103004);  , W9 G2 S/ W- a) \$ T
  回车。  
% R4 y  |8 a3 S# ?" J0 c' S" g  新值存在里面了吗?  / v# |4 \  c3 @+ _
  mysql>select * from table01;  0 F7 V; r9 t) `0 D
  field01 field02 field03 field04 field05  
) O$ K6 t6 V4 G7 e- v- a% ^* ?  1 first NULL NULL NULL  ! R/ y* ?+ X7 Q6 h; j$ i
  2 second another 1999-10-23 10:30:00  8 ~; |& Q4 E# m8 }3 v! @
  3 a third more 1999-10-24 10:30:04  ( b) W4 H$ B9 X1 Y3 z1 L
  11.表的数据更新5 ?* G9 O- y4 }: v4 a& r! E
  一次修改一个字段  ( l4 o1 V/ o( Y
  再次注意语法。文本需要加引号但数字不要。  
& @( s6 z: i1 d% q+ F. T! H  mysql>更新 table01 set field03=';new info'; where field01=1;  
" \4 g/ b4 ^( u7 t3 H" \/ ~  Query OK, 1 row affected (0.00 sec)  0 U& N8 d( C6 f. l' m& b
  一次改变多个字段  
% ]5 s0 }4 J  \5 F9 {$ W  记住在每一个更新的字段间用逗号隔开。  
4 j, G% D8 i2 U: D4 }0 z1 I  mysql>更新 table01 set field04=19991022, field05=062218 where field01=1;    e/ E- N& i. i) e9 U. z$ Y. F9 s) L/ I
  Query OK, 1 row affected (0.00 sec)  
" h0 _1 H; `5 J! D  一次更新多个数据  & g- g( i" }# W1 w/ j" p; k
  mysql>更新 table01 set field05=152901 where field04>19990101;  ; t2 n4 g- D, ~
  Query OK, 3 rows affected (0.00 sec)  " Y3 i# o  V; O
  12.删除数据9 Z/ H( E' }. v. c' \
  mysql>删除 from table01 where field01=3;  * B6 u6 F/ B. b2 `3 M- q
  Query OK, 1 row affected (0.00 sec)  ! t7 i, v1 w  j
  13.退出
5 o2 W% }- T# p+ S2 ?! u% O1 v  mysql>quit  4 ~. {; p. d- e/ X: l
  Bye
+ y6 b/ Q+ P( ]: e% a4 p" ~  现在你已经了解了一些运行MySQL中的数据库的根本命令。由于MySQL是通过执行SQL调用来操作的,在你的处理过程中需要一个强有力工具的充足的数组。例如,通过联接相关的字段,你可以同时显示几个表中的数据。同样,SQL允许综合显示、更新或者删除多个符合具体标准的数据。如果你还想精通掌握它,下一步就要学习所有SQL的知识。' ~5 Q, a* ^8 H. ^( i% S
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--

[转帖]数据库人员手边系列:SQL语法查询文档(上)

2 楼的次序错了( x- E. E  T3 m2 b0 \9 a- J; P8 p
不好意思
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--

[转帖]数据库人员手边系列:SQL语法查询文档(上)

5.执行查询  8 V7 j3 I' H# N* r1 i5 E( j# {& ~
  查询是使用最多的SQL命令。查询数据库需要凭借结构、索引和字段类型等因素。大多数数据库含有一个优化器(optimizer),把用户的查询语句转换成可选的形式,以提高查询效率。  
4 A5 @. P% q% y# C/ o  值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。其基本语法如下:  
2 K8 Y7 f+ L& W$ v/ s  SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]  8 E" A' z7 y0 }, v, c, b
  [DISTINCT | DISTINCTROW | ALL]  % R; s% D# h% d# k
  select_expression,...  % n5 H- I6 d2 K  Q
  [INTO {OUTFILE | DUMPFILE} ';file_name'; export_options]  ) f+ f0 L' d, t& o% R
  [FROM table_references  
: ]2 Q4 L5 h$ a* {! T2 Y! ]; g6 l  [WHERE where_definition]  7 }. F8 O, D# U/ q6 @# f
  [GROUP BY col_name,...]  
( H; x! b7 e: d' P8 U9 q: t- n  [HAVING where_definition]  4 l8 F0 G# d9 R$ I+ W  a7 w
  [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]  & c5 ]+ L% Z7 W% K
  [LIMIT [offset,] rows]  # N: k, W. H& ?& O1 K
  [PROCEDURE procedure_name] ]  5 v/ a' J/ J* z
  其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式:  
- G' i9 g4 M. y  字段名操作表达式  
6 T7 d1 f& n4 V; Y. F- ?! B  字段名操作字段名  " L! p) x/ R4 p& q% R
  在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。根据所比较的数据类型,search_conditio/ j0 I" R4 a* O$ b- t
  n中的操作可能选以下几种:  ) p& ~; C4 J3 Y: ~
  = 检查是否相等  
# u* \, @9 A4 ^* m9 U  != 检查是否不等  
, ?/ p2 _3 t  H, l% L1 x  v2 G  > (或>=) 检查左边值是否大于(或大于等于)右边值  ! t3 _7 w& c6 g( o- g: P
  < (或<=) 检查左边值是否小于(或小于等于)右边值  7 T. N+ A& K0 e/ u4 i
  [not] between 检查左边值是否在某个范围内  & a5 |5 @) x2 ?" |& y) E
  [not] in 检查左边是否某个特定集的成员  
1 i1 p2 S9 ^/ k1 ~$ K' a( F6 o. G5 c  [not] like 检查左边是否为右边的子串  
1 P/ n% ]9 i) }, A  is [not] null 检查左边是否为空值  ; m3 B. f7 L% ~5 j/ J& L, Z
  在这里,可以用通配符_代表任何一个字符,%代表任何字符串。使用关键字<AND>、<OR>和<NOT>可以生成复杂的词,它们运行检查时使用布尔( R6 r5 Z4 Q, K6 Y4 Y- C# l
  表达式的多重标准集。  , |( w* e& r& z5 \9 r6 g  `6 p% P: ?
  例:  . Z8 g' A  ]' f3 Q' o
  mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name;  5 U2 Q$ t* H/ Q( \
  mysql> select college, region, seed from tournament  
1 ^+ s6 w( E: U) \! e( T  ORDER BY region, seed;  
1 j# f( d# }2 @; d& _, \+ t" U+ v" ]  mysql> select col_name from tbl_name WHERE col_name > 0;  
0 L8 k. D8 C/ N$ E' e  6.修改表中数据  ; t% n5 h% L3 x% w, @
  在使用数据库过程中,往往要修改其表中的数据,比如往表中添加新数据,删除表中原有数据,或对表中原有数据进行更改。它们的基本语法如下:  6 [( ]- @$ z' r( A
  数据添加:  
  _7 ~1 c' k9 b& b! _; \  insert [into] table_name [(column(s))]  2 R! ]7 g7 y4 R
  values (expression(s))  
9 v  J4 `. U. u) j' l  t/ Q  例:    D! q; a: ~+ j( {, N2 H; a; q, g
  mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);  " v, s. w& y8 z/ b
  数据删除:  
# x$ e& n/ y7 G( ~/ P, @  删除 from table_name where search_condition  
" P6 H& p: o5 V4 c( p1 R  数据更改:  2 A0 @1 ^7 m4 Y
  更新 table_name  . f! y1 @# K) ?' c$ T
  set column1=expression1,  
+ |& f7 r# t% L9 q  column2=expression2,…  % K* L& ^- O! ^- }, T* O& `+ Z
  where search_condition  
# C7 M7 D. z0 k9 h0 H  7.数据库切换  9 y9 z9 h1 s1 u+ x$ }, u$ y
  当存在多个数据库时,可以用下面的命令定义用户想使用的数据库:  " |6 A4 w2 b0 D0 I  y
  use database_name  7 _, a% V5 i/ f2 m5 q4 V1 u2 q
  8.统计函数  
. U: t7 _9 b4 S  SQL有一些统计函数,它们对于生成数据表格很有帮助。下面介绍几个常用的统计函数:  ; X( L/ I8 x3 W$ Q4 q
  sum (exepression) 计算表达式的和  * s' }9 n; e( F2 M
  avg (exepression) 计算表达式的平均值  9 p3 i* L$ V) R. o7 f: `
  count (exepression) 对表达式进行简单的计数  6 a3 y2 f  Z# U/ f9 O
  count (*) 统计记录数  9 k6 L* s" K* e4 ^/ B4 l
  max (exepression) 求最大值  
% q0 c9 n; T# G* m; }  min (exepression) 求最小值  1 b# G  p1 H) f( _3 \
  其中exepression为任何有效的SQL表达式,它可以是一个或多个记录,也可以是别的SQL函数的组合。* ?% Q1 E& ~" p5 N

* k& b+ e0 t3 R7 h  I
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--
返回列表