SQL数字函数
 
1、AVG:算数平均数
AVG(expr)  
expr
字段名称或表达式。
例如:
若要计算职员身高超过165厘米的职员平均身高,可以利用下面的SQL语句来完成。
SELECT   Avg(身高)
AS   平均身高
FROM   职员表格   WHERE   身高> 165;  
2、COUNT:计算记录条数
COUNT(expr)  
expr
字段名称或表达式。
例如:
若是要统计出业务部门的职员人数,并查询出职员的姓名,可以利用下面的程序。
SELECT   Count(姓名)   AS   职员姓名
FROM   职员表格
WHERE   部门名称= '业务部 ';  
3、FIRST与LAST:返回某字段的第一条数据与最后一条数据。
FIRST(expr)
LAST(expr)  
expr
字段名称或表达式。
例如:
若是要找出货品数量字段的第一条数据与货品价格字段的最后一条数据时,可以利用下面的查询方式。
SELECT   FIRST(货品数量),LAST(货品价格)
FROM   订单表格  
4、MAX,与MIN:返回某字段的最大值与最小值。
用法同FIRST与LAST。  
5、SUM:返回某特定字段或是运算的总和数值。
SUM(expr)  
expr
字段名称或表达式。
例如:
要计算出货品总价,可使用下面的程序。
SELECT
Sum(单位价格*货品数量)
AS   货品总价   FROM   订单表格  
多层SQL查询
 
顾名思义,多层的SQL查询的便在于:“在一个SQL语句中可以包含另一个SQL查询语句,形成内部嵌套的查询类型。”
comparison[ANY|ALL|SOME](sqlstatement)
expression[NOT]IN   (sqlstatement)
[NOT]EXISTS(sqlstatement)  
comparison
将表达式与内层查询的结果比较的操作。  
expression
对内层查询的结果作搜索的表达式。  
sqlstatement
为SELECT语句构成的SQL查询,必须用()将该语句括起来。
例如:
我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位与的一一对比,查询出所有高于订单表格的单位价格的记录。
SELECT   *   FROM   产品表格
WHERE   单位价格> ANY   (SELECT   单位价格   FROM   订单表格   WHERE   折扣> =.25);  
SQL与数据库的维护
 
表格的建立
上次已经将SQL中的基本语法作了一番介绍以,但大多是偏向于数据库数据的查询与过滤,但实际上,我们通过SQL命令所可以做的事还有很多,接下来要介绍的便是如何利用SQL的语法命令来建立一个数据库中的表格。  
CREATE   TABLE语句
我们可以利用这个命令,来建立一个全新的表格,但前提则是:数据库必须已经存在。
CREATE   TABLE   table(field1   type[(size)][index1][,field2   type[(size)][index2][,...]][,nultifieldindex[,...]])  
table
欲建立的新的表格名称。  
field1,field2
在新表格中的新的字段名称,到少要一个字段以上。  
type
字段的数据类型。  
size
字段的大小。  
index1,index2
利用CONSTRAINT条件子句定义一个单一字段的索引名称。  
multifieldindex
利用CONSTRAINT条件子句定义一个多重字段的索引名称。
例如:
建立一个拥有职员姓名与部门字段的表格。
CREATE   TABLE   职员表格   (姓名TEST,部门TEST,职员编号   INTEGER   CONSTRAINT职员字段索引PRIMARY   KEY)
在这一个范例中,我们建立了一个表格名称为“职员表格”的表格,并且定义了该表格的主键值,以限制数据不能重复输入。  
   
表格索引的建立  
CREATE   INDEX语句
这个命令主要是对一个已存在的表格建立索引,其用法如下:
CREATE[UNIQUE]INDEX   index   ON   table(field[ASC|DESC][,field[ASC|DESC],...])
[WITH   {PRIMARY|DISALLOWNULL|IGNORENULL}]  
index
欲被建立的索引名称。  
table
欲建立索引的表格名称。  
field
欲被建立的索引的字段名称。并可通过DESC保留字,来决定索引的顺序。
例如:
在职员表格中建立一个索引。
CREATE   INDEX   新索引名称
ON   职员表格(姓名部门);  
   
表格的字段更新  
CONSTRAINT条件子句
CONSTRAINT   的功能是类似索引(INDEX)的,虽然CONSTRAINT   也可以建立表格之间的关联性。  
单一字段索引:
CONSTRAINT   name{PRIMARY   KEY|UNIQUE|REFERENCES   foreigntable[(foreignfield1,foreignfield2)]}  
多字段索引:
CONSTRAINT   name
{PRIMARY   KEY(primary1[,primary2[,...]])
|UNIQUE(unique1[,unique2[,...]])
|FOREIGN   KEY   (ref1[,ref2[,...]])
|REFERENCES   foreigntable[(foreignfield1[,foreignfield2[,...]])]}  
name
要被建立的CONSTRAINT名称。  
primary1,primary2
被用来设计成主键值的字段名称(可一个以上)。  
unique1,unique2
被用来设计成唯一键值的字段名称(可一个以上)。  
foreign   key
字段名称,或是参考到别的表格中字段的字段名称。  
foreigntable
如前所述,被参考到的表格。  
foreignfield1,foreignfield2
在参考到的表格当中,被ref1,ref2字段所指定的字段。如果被参考的字段是参考表格中的主键值,你也可以省略这个条件子句。
例如:
当我们要建立一个新的职员数据表格,表格包含姓名、部门名称与生日三个字段,且由这三个字段建立一个唯一的索引时,可以使用下面这段SQL的语句。
CREATE   TABLE   职员数据表格
(姓名   TEST,部门名称   TEST,生日   DATETIME,CONSTRAINT   职员数据表格限制   UNIQUE(姓名,部门名称,生日));
以上是SQL中,与数据库表格建立相关的命令,你可以利用这些命令,通过SQL的语句,将数据库表格完整的建立出来,接下来的章节,将针对数据库建立之后的维护与增删所要使用的SQL语句作一介绍。  
   
表格的删除  
DELETE语句
我们可以利用DELETE语句,将表格中的记录删除。(注意:记录被删除后,无法再复原,所以条件设置要正确)
DELETE[table.*]
FROM   tableexpression
WHERE   criteria  
table
欲删除记录的表格名称,也可以用*来取代。  
tableexpression
一个或一个以上表格的名称。此一参数可以为单一的表格名称或是从INNER   JOIN,LEFT   JOIN,或RIGHTJOIN   等运算所得到的结果。  
criteria
决定表格中记录要被删除的标准。
例如:
若是我们要将职员表格中姓名姓名叫做 '李名 '的记录删除,我们可以利用下面的SQL语句来完成。
DELETE   *   FROM   职员表格
WHERE   姓名= '李名 ';  
   
数据库表格相关的操作命令
SQL除了可以作为查询与数据库表格的建立的工具外,对于数据库与表格的新建、删修、与维护,与具有相当不错的功能,若是读者使用SQL命令得宜,对于整个效率的提高有着很大的帮助,所以对于SQL语句所带来的优势,常常会遇到一个情况,就是:“当我们对多个表格作复杂与多步骤的处理时,或许SQL只要一个语句就可以完成所有的需求与目标”,乍看一下,或许觉得有些玄妙,但是接下来的章节,会让你了解其中的妙处。  
SELECT...INTO语句
我们可以通过这个命令,利用既存表格查询,来建立一个新表格的查询语句。
SELECT   field1[,field2[,...]]INTO   newtable[IN   externaldatabase]
FROM   source  
field1,field2
欲拷贝到新表格的字段名称。  
newtable
欲建立之新表格的名称,不可是已经存在的表格。  
externaldatabase
若是该表格在另外的外部数据库时,该数据库的名称。  
source
记录数据拷贝的来源表格名称,可以是单一的表格或是一段SQL查询之语句。
例如:
你可以通过下面的SQL语句,来建立一个新的“训练名册”表格。
SELECT   职员表格.姓名,职员表格.部门
INTO   训练名册   FROM   职员表格
WHERE   职称= '新进人员 ';  
   
INNER   JOIN操作数
当某一个共同的字段数据相等时,将两个表格的记录加以组合。
SELECT   fields
FROM   table1   INNER   JOIN   table2
ON   table1.field1   compopr   table2.field2  
table1,table2
欲进行记录组合的表格名称。  
field1,field2
欲组合的字段名称。(必须具有相同的数据类型)  
compopr
比较关系运算符如下:“=”,“ <”,“> ”,“ <=”,“ <> ”等。
例如:
若是你要把分类表格与产品表格作组合,可参考下面的SQL语句。
SELECT   分类名称,产品名称
FROM   分类表格   INNER   JOIN   产品表格
ON   分类表格.分类编号=产品表格.分类编号;  
   
UNION操作数
我们可以通过UNION操作数来建立连接的查询条件,UNION操作数可以将两个以上的表格或是查询的结果组合起来。
[TABLE]query1   UNION   [ALL][TABLE]query2   [UNION   [ALL]
[TABLE]queryn   [...]]  
query1,query2,queryn
为一个SELECT的语句,或是一个已存在的查询名称,或是一个已存在的表格名称。
例如:
你可以利用下面的SQL语句,将订单数量超过1000的顾客表格记录,与新客户表格作UNION的操作。
TABLE   新客户表格   UNION   ALL
SELECT   *
FROM   顾客表格
WHERE   订单数量> 1000;  
   
ALTER语句
在一个表格被建立之后,利用ALTER语句,我们可以去修改表格的字段设计。
ALTER   TABLE   table
{ADD   {COLUMN   field   type[(size)][CONSTRAINT   index]
|CONSTRAINT   multifieldindex}
|DROP   {COLUMN   field|CONSTRAINT   indexname}}  
table
欲被ALTER的表格名称。  
field
要被增加或删除的字段名称。  
type
字段数据类型。  
size
字段大小。  
index
对此字段的索引。
例如:
在职员表格中新建一个“薪水”的字段。
ALTER   TABLE   职员表格
ADD   COLUMN   薪水   CURRENCY;  
例如:
在职员表格中删除一个“薪水”的字段。
ALTER   TABLE   职员表格   DROP   COLUMN   薪水;
 
   
DROP语句
针对所指定的表格或字段加以删除,或是把索引删除。
DROP   {TABLE   table|INDEX   index   ON   table}  
table
欲删除之表格或索引依附之表格名称。  
index
欲从表格中删除的索引名称。
例如:
从职员表格中,删除编号索引。
DROP   INDEX   MyIndex   ON   Employees;  
例如:
从数据库中,删除整个表格。
DROP   TABLE   职员表格;
 
   
INSERT   INTO语句
新建一条数据到表格当中。  
多条记录新建查询:
INSERT   INTO   target   [IN   externaldatabase][(field1[,field2[,...]])]
SELECT   [source.]field1[,field2[,...]
FROM   tableexpression  
单条记录新建查询:
INSERT   INTO   target[(field1[,field2[,...]])]
VALUES(value1[,value2[,...])  
target