|
导读数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应... 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 BETWEEN...AND 运算符 决定某一人数值是否介于特定的范围之内,此运算符只可以用在SQL的语句中。 expr[Not]BETWEEN value1 AND value2 expr 指定要加以计算的字段与表达式的组合。 value1,value2 所指明的数值范围。 例如: 若是要从职员表格查询出所有年龄介于25-30岁的员工,可以利用下面的程序来做。 SELECT 姓名,年龄 BETWEEN 25 AND 30 FROM 职员表格; LIKE 操作数 用来将一字符串与另一特定字符串样式(pattern)比较,并将符合该字符串样式的记录过滤出来。 expression LIKE "pattern" expression 使用在WHERE条件子句,SQL表达式。 pattern 用以比较的字符串样式。 例如: 若是你要查询出所有以“李”为首的姓氏,可以利用下面的式子。 Like "李*" LIKE操作数的多种范例: 1、多个字符: (1)"a*a" 可筛选:"aa","aBa","aBBBa",不能筛选:"aBC" (2)"*ab*" 可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac" 2、特殊字符: "a“*”a" 可筛选:"a*a",不能筛选:"aaa" 3、单一字符: "a?a" 可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa" 4、单一数字: "a#a" 可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a" 5、字符范围: "“a-z”" 可筛选:"f","p","j",不能筛选:"2","&" 6、指定字符以外部范围: "“!a-z”" 7、指定非数字: "“!0-9”" 可筛选:"A","a","&","~",不能筛选:"0","1","9" 8、组合式结构: "a“!b-m”#" 可筛选:"An9","az0","a99",不能筛选:"abc","aj0" 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); [page_break]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语句作一介绍。 [page_break]表的删除 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 新建记录的表格名称。 externaldatabase 外部数据库的路径,搭配IN条件子句使用。 source 若是记录从其它表格中拷贝时,指明该表格的名称。 field1,field2 欲增加数据的字段名称。 tableexpression 表格名称或描述记录是从哪一个表格中插入的表格名称。配合INNER JOIN,LEFT JOIN,或 RIGHT JOIN 运算符一起使用。 value1,value2 欲插入表格中的数值。 例如: 在客户数据表格中,从新的表格插入数据。 INSERT INTO 客户数据表格 SELECT 新客户数据表格.* FROM 新客户数据表格; 例如: 在职员表格中插入数据。 INSERT INTO 职员表格(姓名,生日,职称) VALUES("王荣","57/12/11","经理"); 例如: 从训练人员表格中,将职员雇用时间超过30天者,加入到正式职员表格中。 INSERT INTO 职员表格 SELECT 训练人员表格.* FROM 训练人员表格 WHERE 雇用天数> 30; UPDATE语句 建立一个UPDATE的查询,通过条件的限制来修改特定的数据。 UPDATE table SET newvalue WHERE criteria; table 欲修改数据的表格名称。 newvalue 欲修改成的数值(将该项数值插入到特定的字段当中)。 criteria 查询条件,用来决定要修改哪些记录。 例如: 若是要把订单表格中的订单数量修改成1.1倍,运费为1.03倍,可利用下列之SQL语句来完成。 UPDATE 订单表格 SET 订单数量=订单数量 * 1.1,运费=运费 * 1.03倍 WHERE 运达地点=’美国’; 当我们完成修改后,你可以利用 SELECT 语句,配合同样的 WHERE 条件子句,来察看修改的数据是否正确。 事实上,要利用SQL完成某些看似复杂的操作,并不需要繁琐的SQL命令组合,或是许许多多的步骤才能完成,其实最重要的还是要活用SQL命令,才会在最精简的SQL语句里获得最高的效率。 全新的路由器不仅让你更稳定快速地连接无线网络,更可以让家中的智能设备连接在一起。 |
温馨提示:喜欢本站的话,请收藏一下本站!