有什么那个网站,ps做网站标签,家在深圳网页版,网站 系统 区别下列语句部分是Mssql语句#xff0c;不可以在access中使用。 SQL分类#xff1a; DDL—数据定义语言(CREATE#xff0c;ALTER#xff0c;DROP#xff0c;DECLARE) DML—数据操纵语言(SELECT#xff0c;DELETE#xff0c;UPDATE#xff0c;INSERT) DCL—数据控制… 下列语句部分是Mssql语句不可以在access中使用。 SQL分类 DDL—数据定义语言(CREATEALTERDROPDECLARE) DML—数据操纵语言(SELECTDELETEUPDATEINSERT) DCL—数据控制语言(GRANTREVOKECOMMITROLLBACK) 首先,简要介绍基础语句 1、说明创建数据库 CREATE DATABASE database-name 2、说明删除数据库 drop database dbname 3、说明备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice disk, testBack, c:/mssql7backup/MyNwind_1.dat --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表 Acreate table tab_new like tab_old (使用旧表创建新表) Bcreate table tab_new as select col1,col2… from tab_old definition only 5、说明 删除新表drop table tabname 6、说明 增加一个列Alter table tabname add column col type 注列增加后将不能删除。DB2中列加上后数据类型也不能改变唯一能改变的是增加varchar类型的长度。 7、说明 添加主键Alter table tabname add primary key(col) 说明 删除主键Alter table tabname drop primary key(col) 8、说明 创建索引create [unique] index idxname on tabname(col….) 删除索引drop index idxname 注索引是不可更改的想更改必须删除重新建。 9、说明 创建视图create view viewname as select statement 删除视图drop view viewname 10、说明几个简单的基本的sql语句 选择select * from table1 where 范围 插入insert into table1(field1,field2) values(value1,value2) 删除delete from table1 where 范围 更新update table1 set field1value1 where 范围 查找select * from table1 where field1 like ’%value1%’ ---like的语法很精妙查资料! 排序select * from table1 order by field1,field2 [desc] 总数select count * as totalcount from table1 求和select sum(field1) as sumvalue from table1 平均select avg(field1) as avgvalue from table1 最大select max(field1) as maxvalue from table1 最小select min(field1) as minvalue from table1 11、说明几个高级查询运算词 A UNION 运算符 UNION 运算符通过组合其他两个结果表例如 TABLE1 和 TABLE2并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时即 UNION ALL不消除重复行。两种情况下派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)不消除重复行。 C INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)不消除重复行。 注使用运算词的几个查询结果行必须是一致的。 12、说明使用外连接 A、left outer join 左外连接左连接结果集几包括连接表的匹配行也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a b.c Bright outer join: 右外连接(右连接)结果集既包括连接表的匹配连接行也包括右连接表的所有行。 Cfull outer join 全外连接不仅包括符号连接表的匹配行还包括两个连接表中的所有记录。 其次大家来看一些不错的sql语句 1、说明复制表(只复制结构,源表名a 新表名b) (Access可用) 法一select * into b from a where 11 法二select top 0 * into b from a 2、说明拷贝表(拷贝数据,源表名a 目标表名b) (Access可用) insert into b(a, b, c) select d,e,f from b; 3、说明跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件 例子..from b in Server.MapPath(.)/data.mdb where.. 4、说明子查询(表名1a 表名2b) 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) 5、说明显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.titlea.title) b 6、说明外连接查询(表名1a 表名2b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a b.c 7、说明在线视图查询(表名1a ) select * from (SELECT a,b,c FROM a) T where t.a 1; 8、说明between的用法,between限制查询数据范围时包括了边界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 数值1 and 数值2 9、说明in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明两张关联表删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1table2.field1 ) 11、说明四表联查问题 select * from a left inner join b on a.ab.b right inner join c on a.ac.c inner join d on a.ad.d where ..... 12、说明日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff(minute,f开始时间,getdate())5 13、说明一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 a.主键字段 order by a.排序字段 14、说明前10条记录 select top 10 * form table1 where 范围 15、说明选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a(select max(a) from tablename tb where tb.bta.b) 16、说明包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明随机取出10条数据 select top 10 * from tablename order by newid() 18、说明随机选择记录 select newid() 19、说明删除重复记录 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、说明列出数据库里所有的表名 select name from sysobjects where typeU 21、说明列出表里的所有的 select name from syscolumns where idobject_id(TableName) 22、说明列示type、vender、pcs字段以type字段排列case可以方便地实现多重选择类似select 中的case。 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 type 显示结果 type vender pcs 电脑 A 1 电脑 A 1 光盘 B 2 光盘 A 2 手机 B 3 手机 C 3 23、说明初始化表table1 TRUNCATE TABLE table1 24、说明选择从10到15的记录 select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc 随机选择数据库记录的方法使用Randomize函数通过SQL语句实现 对存储在数据库中的数据来说随机数特性能给出上面的效果但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环 Randomize RNumber Int(Rnd*499) 1 While Not objRec.EOF If objRec(ID) RNumber THEN ... 这里是执行脚本 ... end if objRec.MoveNext Wend 这很容易理解。首先你取出1到500范围之内的一个随机数假设500就是数据库内记录的总数。然后你遍历每一记录来测试ID的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber等于495那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些但相比更为稳固的企业解决方案这还是个小型数据库了后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了 采用SQL你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset如下所示 Randomize RNumber Int(Rnd*499) 1 SQL SELECT * FROM Customers WHERE ID RNumber set objRec ObjConn.Execute(SQL) Response.WriteRNumber objRec(ID) objRec(c_email) 不必写出RNumber 和ID你只需要检查匹配情况即可。只要你对以上代码的工作满意你自可按需操作“随机”记录。Recordset没有包含其他内容因此你很快就能找到你需要的记录这样就大大降低了处理时间。 再谈随机数 现在你下定决心要榨干Random 函数的最后一滴油那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 为了取出几条随机选择的记录并存放在同一recordset内你可以存储三个随机数然后查询数据库获得匹配这些数字的记录 SQL SELECT * FROM Customers WHERE ID RNumber OR ID RNumber2 OR ID RNumber3 假如你想选出10条记录也许是每次页面装载时的10条链接的列表你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成但是 SELECT 语句只显示一种可能这里的ID 是自动生成的号码 SQL SELECT * FROM Customers WHERE ID BETWEEN RNumber AND RNumber 9 注意以上代码的执行目的不是检查数据库内是否有9条并发记录。 随机读取若干条记录测试过 Access语法SELECT top 10 * From 表名 ORDER BY Rnd(id) Sql server:select top n * from 表名 order by newid() mysql select * From 表名 Order By rand() Limit n Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) 语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ... 使用SQL语句 用...代替过长的字符串显示 语法 SQL数据库select case when len(field)10 then left(field,10)... else field end as news_name,news_id from tablename Access数据库SELECT iif(len(field)2,left(field,2)...,field) FROM tablename; Conn.Execute说明 Execute方法 该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集该方法的使用格式分为以下两种 1执行SQL查询语句时将返回查询得到的记录集。用法为 Set 对象变量名连接对象.Execute(SQL 查询语言) Execute方法调用后会自动创建记录集对象并将查询结果存储在该记录对象中通过Set方法将记录集赋给指定的对象保存以后对象变量就代表了该记录集对象。 2执行SQL的操作性语言时没有记录集的返回。此时用法为 连接对象.Execute SQL 操作性语句 [, RecordAffected][, Option] ·RecordAffected 为可选项此出可放置一个变量SQL语句执行后所生效的记录数会自动保存到该变量中。通过访问该变量就可知道SQL语句队多少条记录进行了操作。 ·Option 可选项该参数的取值通常为adCMDText它用于告诉ADO应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数可使执行更高效。 ·BeginTrans、RollbackTrans、CommitTrans方法 这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物RollbackTrans用于回滚事务CommitTrans用于提交所有的事务处理结果即确认事务的处理。 事务处理可以将一组操作视为一个整体只有全部语句都成功执行后事务处理才算成功若其中有一个语句执行失败则整个处理就算失败并恢复到处里前的状态。 BeginTrans和CommitTrans用于标记事务的开始和结束在这两个之间的语句就是作为事务处理的语句。判断事务处理是否成功可通过连接对象的Error集合来实现若Error集合的成员个数不为0则说明有错误发生事务处理失败。Error集合中的每一个Error对象代表一个错误信息。 SQL语句大全精要 2006/10/26 13:46 DELETE语句 DELETE语句用于创建一个删除查询可从列在 FROM 子句之中的一个或多个表中删除记录且该子句满足 WHERE 子句中的条件可以使用DELETE删除多个记录。 语法DELETE [table.*] FROM table WHERE criteria 语法DELETE * FROM table WHERE criteria查询的字 说明table参数用于指定从其中删除记录的表的名称。 criteria参数为一个表达式用于指定哪些记录应该被删除的表达式。 可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过若用这种方法删除表将会失去表的结构。不同的是当使用DELETE只有数据会被删除表的结构以及表的所有属性仍然保留例如字段属性及索引。 UPDATE 有关UPDATE急 在ORACLE数据库中 表 A ( ID ,FIRSTNAME,LASTNAME ) 表 B( ID,LASTNAME) 表 A 中原来ID,FIRSTNAME两个字段的数据是完整的 表 B中原来ID,LASTNAME两个字段的数据是完整的 现在要把表 B中的LASTNAME字段的相应的数据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。 先谢谢了!!!! update a set a.lastname(select b.lastname from b where a.idb.id) 掌握SQL四条最基本的数据操作语句InsertSelectUpdate和Delete。 练掌握SQL是数据库用户的宝贵财富。在本文中我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后显然你已经开始算是精通SQL了。 在我们开始之前先使用CREATE TABLE语句来创建一个表如图1所示。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言DML语句进行处理。 SQL中有四种基本的DML操作INSERTSELECTUPDATE和DELETE。由于这是大多数SQL用户经常用到的我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表我们在后面的例子中将要用到它。 INSERT语句 用户可以用INSERT语句将一行记录插入到指定的一个表中。例如要将雇员John Smith的记录插入到本例的表中可以使用如下语句 INSERT INTO EMPLOYEES VALUES (Smith,John,1980-06-10, Los Angles,16,45000); 通过这样的INSERT语句系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中第一个值“Smith”将填到第一个列LAST_NAME中第二个值“John”将填到第二列FIRST_NAME中……以此类推。 我们说过系统会“试着”将值填入除了执行规则之外它还要进行类型检查。如果类型不符如将一个字符串填入到类型为数字的列中系统将拒绝这一次操作并返回一个错误信息。 如果SQL拒绝了你所填入的一列值语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败则整个事务都会失败系统将会被恢复或称之为回退到此事务之前的状态。 回到原来的INSERT的例子请注意所有的整形十进制数都不需要用单引号引起来而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住在SQL中逗号是元素的分隔符。 同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。 对于日期类型我们必须使用SQL标准日期格式yyyy-mm-dd但是在系统中可以进行定义以接受其他的格式。当然2000年临近请你最好还是使用四位来表示年份。 既然你已经理解了INSERT语句是怎样工作的了让我们转到EMPLOYEES表中的其他部分 INSERT INTO EMPLOYEES VALUES (Bunyan,Paul,1970-07-04, Boston,12,70000); INSERT INTO EMPLOYEES VALUES (John,Adams,1992-01-21, Boston,20,100000); INSERT INTO EMPLOYEES VALUES (Smith,Pocahontas,1976-04-06, Los Angles,12,100000); INSERT INTO EMPLOYEES VALUES (Smith,Bessie,1940-05-02, Boston,5,200000); INSERT INTO EMPLOYEES VALUES (Jones,Davy,1970-10-10, Boston,8,45000); INSERT INTO EMPLOYEES VALUES (Jones,Indiana,1992-02-01, Chicago,NULL,NULL); 在最后一项中我们不知道Jones先生的工薪级别和年薪所以我们输入NULL不要引号。NULL是SQL中的一种特殊情况我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。 有时像我们刚才所讨论的情况我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外还可以采用另外一种INSERT语句如下 INSERT INTO EMPLOYEES( FIRST_NAME, LAST_NAME, HIRE_DATE, BRANCH_OFFICE) VALUE( Indiana,Jones, 1992-02-01,Indianapolis); 这样我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项这两项规定不能为空SQL操作将失败。 让我们来看一看上述INSERT语句的语法图 INSERT INTO table [(column { ,column})] VALUES (columnvalue [{,columnvalue}]); 和前一篇文章中一样我们用方括号来表示可选项大括号表示可以重复任意次数的项不能在实际的SQL语句中使用这些特殊字符。VALUE子句和可选的列名列表中必须使用圆括号。 SELECT语句 SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能所以SELECT语句在SQL中是工作量最大的部分。实际上仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。 SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列并将结果放到临时的表中。在直接SQLdirect SQL中它将结果显示在终端的显示屏上或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。 SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”或称“限制”但实际上它也可以完成其他两种关系运算—“投影”和“连接”SELECT语句还可以完成聚合计算并对数据进行排序。 SELECT语句最简单的语法如下 SELECT columns FROM tables; 当我们以这种形式执行一条SELECT语句时系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。 让我们看一下使用图1中EMPLOYEES表的一些例子这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果。 假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询 SELECT BRANCH_OFFICE FROM EMPLOYEES; 以上SELECT语句的执行将产生如图2中表2所示的结果。 由于我们在SELECT语句中只指定了一个列所以我们的结果表中也只有一个列。注意结果表中具有重复的行这是因为有多个雇员在同一部门工作记住SQL从所选的所有行中将值返回。要消除结果中的重复行只要在SELECT语句中加上DISTINCT子句 SELECT DISTINCT BRANCH_OFFICE FROM EMPLOYEES; 这次查询的结果如表3所示。 现在已经消除了重复的行但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢只要使用ORDER BY子句就可以按照升序或降序来排列结果 SELECT DISTINCT BRANCH_OFFICE FROM EMPLOYEES ORDER BY BRANCH_OFFICE ASC; 这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢这是因为我们还能够按照表中其他列进行排序即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列那么可以用关键字DESC。 同样我们应该指出ORDER BY子句只将临时表中的结果进行排序并不影响原来的表。 假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句 SELECT BRANCH_OFFICE,FIRST_NAME, LAST_NAME,SALARY,HIRE_DATE FROM EMPLOYEES ORDER BY SALARY DESC, HIRE_DATE DESC; 这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时这些行将被按照第二列进行排序如果在第二列中又出现了重复的行时这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。 将一个很长的表中的所有列名写出来是一件相当麻烦的事所以SQL允许在选择表中所有的列时使用*号 SELECT * FROM EMPLOYEES; 这次查询返回整个EMPLOYEES表如表1所示。 下面我们对开始时给出的SELECT语句的语法进行一下更新竖直线表示一个可选项允许在其中选择一项。 SELECT [DISTINCT] (column [{, columns}])| * FROM table [ {, table}] [ORDER BY column [ASC] | DESC [ {, column [ASC] | DESC }]]; 定义选择标准 在我们目前所介绍的SELECT语句中我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行 SELECT columns FROM tables [WHERE predicates]; WHERE子句对条件进行了设置只有满足条件的行才被包括到结果表中。这些条件由断言predicate进行指定断言指出了关于某件事情的一种可能的事实。如果该断言对于某个给定的行成立该行将被包括到结果表中否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如假如你需要查询所有姓为Jones的职员则可以使用以下SELECT语句 SELECT * FROM EMPLOYEES WHERE LAST_NAME Jones; LAST_NAME Jones部分就是断言。在执行该语句时SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”即断言成立该职员的信息将被包括到结果表中见表6。 使用最多的六种比较 我们上例中的断言包括一种基于“等值”的比较LAST_NAME Jones但是SQL断言还可以包含其他几种类型的比较。其中最常用的为 等于 不等于 小于 /P 大于 小于或等于 大于或等于 下面给出了不是基于等值比较的一个例子 SELECT * FROM EMPLOYEES WHERE SALARY 50000; 这一查询将返回年薪高于$50,000.00的职员参见表7。 逻辑连接符 有时我们需要定义一条不止一种断言的SELECT语句。举例来说如果你仅仅想查看Davy Jones的信息的话表6中的结果将是不正确的。为了进一步定义一个WHERE子句用户可以使用逻辑连接符ANDOR和NOT。为了只得到职员Davy Jones的记录用户可以输入如下语句 SELECT * FROM EMPLOYEES WHERE LAST_NAME Jones AND FIRST_NAME Davy; 在本例中我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时可以使用OR连接符 SELECT * FROM EMPLOYEES WHERE LAST_NAME Jones OR LAST_NAME Smith; 有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时你可以进行如下的查询 SELECT * FROM EMPLOYEES WHERE NOT(BRANCH_OFFICE Boston); 关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston括号内的表达式返回true但是NOT操作符将该值取反所以该行将不被选中。 断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值可以用括号将它们括起来 SELECT * FROM EMPLOYEES WHERE (LAST_NAME Jones AND FIRST_NAME Indiana) OR (LAST_NAME Smith AND FIRST_NAME Bessie); SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值其他表达式将从左到右进行求值。 以上对逻辑连接符进行了说明在对下面的内容进行说明之前我们再一次对SELECT语句的语法进行更新 SELECT [DISTINCT] (column [{, column } ] )| * FROM table [ { , table} ] [ORDER BY column [ASC] | [DESC [{ , column [ASC] | [DESC } ] ] WHERE predicate [ { logical-connector predicate } ]; NULL和三值逻辑 在SQL中NULL是一个复杂的话题关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理并且你也很可能会遇到它所以我们还是简略地进行一下说明。 首先在断言中进行NULL判断时需要特殊的语法。例如如果用户需要显示所有年薪未知的职员的全部信息用户可以使用如下SELECT语句 SELECT * FROM EMPLOYEES WHERE SALARY IS NULL; 相反如果用户需要所有已知年薪数据的职员的信息你可以使用以下语句 SELECT * FROM EMPLOYEES WHERE SALARY IS NOT NULL; 请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL而不是标准的比较形式COLUMN NULL、COLUMN NULL或是逻辑操作符NOTNULL。 这种形式相当简单。但当你不明确地测试NULL而它们确实存在时事情会变得很混乱。 例如回过头来看我们图1中的EM-PLOYEES表可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询 SELECT * FROM EMPLOYEES WHERE GRADE SALARY; 此时Indiana Jones应该出现在结果表中。因为NULL都是相等的所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询但是并没有关系。SQL允许进行这样的比较只要两个列都是数字类型的。然而Indiana Jones并没有出现在查询的结果中为什么 正如我们早先提到过的NULL表示未知的值而不是象某些人所想象的那样表示一个为NULL的值。对于SQL来说意味着这个值是未知的而只要这个值为未知就不能将其与其他值比较即使其他值也是NULL。所以SQL允许除了在true和false之外还有第三种类型的真值称之为“非确定”unknown值。 如果比较的两边都是NULL整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后其结果仍是非确定的。由于结果表中只包括断言值为“真”的行所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。 UPDATE语句 UPDATE语句允许用户在已知的表中对现有的行进行修改。 例如我们刚刚发现Indiana Jones的等级为16工资为$40,000.00我们可以通过下面的SQL语句对数据库进行更新并清除那些烦人的NULL。 UPDATE EMPLOYEES SET GRADE 16, SALARY 40000 WHERE FIRST_NAME Indiana AND LAST_NAME Jones; 上面的例子说明了一个单行更新但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果你想让Boston办事处中的所有职员搬到New York你可以使用如下语句 UPDATE EMPLOYEES SET BRANCH_OFFICE New York WHERE BRANCH_OFFICE Boston; 如果忽略WHERE子句,表中所有行中的部门值都将被更新为New York。 UPDATE语句的语法流图如下面所示 UPDATE table SET column value [{, column value}] [ WHERE predicate [ { logical-connector predicate}]]; DELETE语句 DELETE语句用来删除已知表中的行。如同UPDATE语句中一样所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗”之类的警告在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员这一卑鄙的工作可以由以下这条语句来实现 DELETE FROM EMPLOYEES WHERE BRANCH_OFFICE Los Angeles; 如同UPDATE语句中一样省略WHERE子句将使得操作施加到表中所有的行。 DELETE语句的语法流图如下面所示 DELETE FROM table [WHERE predicate [ { logical-connector predicate} ] ]; 转载于:https://www.cnblogs.com/rocblog/archive/2013/04/19/3030517.html