📄 410.html
字号:
定义选择标准<br><br> 在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:<br><br> SELECT columns FROM tables [WHERE predicates];<br><br> WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE LAST_NAME = 'Jones';<br><br> LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。<br><br> 使用最多的六种比较<br><br> 我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:<br><br> 等于 =<br><br> 不等于 <><br><br> 小于 <<br><br> 大于 ><br><br> 小于或等于 <=<br><br> 大于或等于 >=<br><br> 下面给出了不是基于等值比较的一个例子:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE SALARY > 50000;<br><br> 这一查询将返回年薪高于$50,000.00的职员(参见表7)。<br><br> 逻辑连接符<br><br> 有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';<br><br> 在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';<br><br> 有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE NOT(BRANCH_OFFICE = 'Boston');<br><br> 关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。<br><br> 断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE (LAST_NAME = 'Jones'<br><br> AND FIRST_NAME = 'Indiana')<br><br> OR (LAST_NAME = 'Smith'<br><br> AND FIRST_NAME = 'Bessie');<br><br> SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。<br><br> 以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:<br><br> SELECT [DISTINCT]<br><br> (column [{, column } ] )| *<br><br> FROM table [ { , table} ]<br><br> [ORDER BY column [ASC] | [DESC<br><br> [{ , column [ASC] | [DESC } ] ]<br><br> WHERE predicate [ { logical-connector predicate } ];<br><br> NULL和三值逻辑<br><br> 在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。<br><br> 首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE SALARY IS NULL;<br><br> 相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE SALARY IS NOT NULL;<br><br> 请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN <> NULL或是逻辑操作符NOT(NULL)。<br><br> 这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。<br><br> 例如,回过头来看我们图1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:<br><br> SELECT * FROM EMPLOYEES<br><br> WHERE GRADE <= SALARY;<br><br> 此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?<br><br> 正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类型的真值,称之为“非确定”(unknown)值。<br><br> 如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。<br><br> UPDATE语句<br><br> UPDATE语句允许用户在已知的表中对现有的行进行修改。<br><br> 例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。<br><br> UPDATE EMPLOYEES<br><br> SET GRADE = 16, SALARY = 40000<br><br> WHERE FIRST_NAME = 'Indiana'<br><br> AND LAST_NAME = 'Jones';<br><br> 上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:<br><br> UPDATE EMPLOYEES<br><br> SET BRANCH_OFFICE = 'New York'<br><br> WHERE BRANCH_OFFICE = 'Boston';<br><br> 如果忽略WHERE子句,表中所有行中的部门值都将被更新为'New York'。<br><br> UPDATE语句的语法流图如下面所示:<br><br> UPDATE table<br><br> SET column = value [{, column = value}]<br><br> [ WHERE predicate [ { logical-connector predicate}]];<br><br> DELETE语句<br><br> DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:<br><br> DELETE FROM EMPLOYEES<br><br> WHERE BRANCH_OFFICE = 'Los Angeles';<br><br> 如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。<br><br> DELETE语句的语法流图如下面所示:<br><br> DELETE FROM table<br><br> [WHERE predicate [ { logical-connector predicate} ] ];<br><br> 现在我们完成了数据操作语言(DML)的主要语句的介绍。我们并没有对SQL能完成的所有功能进行说明。SQL还提供了许多的功能,如求平均值、求和以及其他对表中数据的计算,此外SQL还能完成从多个表中进行查询(多表查询,或称之为连接)的工作。这种语言还允许你使用GRANT和REVOKE命令控制使用者的数据访问权限。<br><br><br>__________________<br><font color=red>真实源于生活! </font><br>请访问我们的网站: <br>(VB爱好者乐园) <br><a href="http://www.vbgood.com" target=_blank>http://www.vbgood.com</a><br><a href="http://www.d1vb.com" target=_blank>http://www.d1vb.com</a><br><a href="http://61.128.97.225/vbgood/index.asp" target=_blank>http://61.128.97.225/vbgood/index.asp</a><br>拥有1800多个资料! </p></td>
</tr>
</table>
<p>
<CENTER><a href="http://www.jsp001.com/forum/newreply.php?action=newreply&threadid=410">点这里对该文章发表评论</a></CENTER>
<p>该文章总得分是 <font color=red>0</font> 分,你认为它对你有帮助吗?
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=410&intVote=4","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>非常多</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=410&intVote=2","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>有一些</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=410&intVote=1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>无帮助</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=410&intVote=-1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>是灌水</a>](<font color=red>0</font>) </p>
<script language="javascript" src="http://www.jsp001.com/include/read_thread_script.php?threadid=410"></script>
<p><CENTER>
Copyright © 2001 - 2009 JSP001.com . All Rights Reserved <P>
<IMG SRC="../image/jsp001_small_logo.gif" WIDTH="85" HEIGHT="30" BORDER=0 ALT="">
</CENTER></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -