限制行和对数据_第1页
限制行和对数据_第2页
限制行和对数据_第3页
限制行和对数据_第4页
限制行和对数据_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章限制行和对数据排序3.1WHERE子句的用法WHERE定义了SELECT将返回哪些行。条件“condition”指定了必须存在什么或者必须满足什么条件。Oracle9i搜索每一记录以确定条件是否为TRUE。如果记录满足搜索指定的条件,那么查询结果就将返回它。“condition”可以是任何测试真或假的有效表达式。对于表的一个简单搜索来说,WHERE子句使用以下格式:<columnname><comparisonoperator><anothernamedcolumnorvalue>SELECT[DISTINCT|UNIQUE|ALL]{*

|{columnname|expr}[[AS]column_alias]

[,...n]}FROMtablename

[WHEREcondition]

[ORDERBY[expr|position|column_alias][ASC|DESC]]3.1WHERE子句的用法“condition”可以用以下几种方法定义:表达式之间的比较(=、>、!=等等)。一个表达式和一个查询之间的比较。一列表达式和查询中的一列表达式之间的比较。一个表达式和一个列表的任一(ANY)或所有成员之间的比较(ALL)。或者是一个表达式和从查询中得到的值之间的比较。测试一个表达式在(IN)或不在(NOTIN)一个列表中,或者在(IN)或不在(NOTIN)查询的结果中。测试是否存在(BETWEEN)或不在(NOTBETWEEN)一个值和另一个值之间。测试表达式是否为空(ISNULL)或不为空(ISNOTNULL)。测试一个查询是否存在(EXISTS)或不存在(NOTEXISTS)结果。使用LIKE进行模式匹配。一个下划线“_”表示任意一个字符。一个百分号“%”表示任意数目的空格或字符,包括0个空格或字符。以上任何条件使用AND或OR的组合。3.2比较运算符数学比较运算符=等于>大于,只返回其值大于指定条件中的值的记录(不包括刚好符合指定条件的值)。<小于,只返回其值小于指定条件中的值的记录(不包括刚好符合指定条件的值)。<>、!=或^=不等于<=小于或等于>=大于或等于3.2比较运算符其他比较运算符[NOT]BETWEENxANDy允许用户表示一个范围,可以使用可选的NOT。[NOT]IN(x,y,…)与OR逻辑运算符相似。可以搜索满足括号中包括的至少一个条件的记录。可选的NOT取反。[NOT]LIKE如果不能确定具体拼写时,可以使用LIKE来搜索一种模式。使用可选的NOT表示不应该在结果中包括包含指定模式的记录。IS[NOT]NULL允许用户搜索指定字段没有项目的记录。3.2比较运算符1、算术比较运算符例3.1在BOOKS表中查询价格大于55元的书的书名及销售价格SQL>selecttitle,retail2frombooks3whereretail>55;3.2比较运算符例3.2在BOOKS表中查询书名的字母顺序在字母ST之后的所有图书的列表。SQL>selecttitle2frombooks3wheretitle>'ST';3.2比较运算符例3.3在BOOKS表中查询利润低于成本的20%的所有图书的列表。SQL>selecttitle,retail-costprofit,cost2frombooks3whereretail-cost<cost*0.2;3.2比较运算符例3.4查询所居住州的州名的字母顺序在佐治亚(Georgia)州之前的客户的列表。SQL>selectfirstname,lastname,state2fromcustomers3wherestate<='GA';3.2比较运算符例3.5查询所有不居住在佐治亚(Georgia)州的客户的列表。SQL>selectfirstname,lastname,state2fromcustomers3wherestate<>'GA';3.2比较运算符(1)字符串规则无论何时使用串文字值作为搜索条件的一部分,这个值都必须包括在单引号中。如果目标字段只包括“数字”,就不需要单引号。记录中包括的数据是区分大小写的。3.2比较运算符例3.6查询所有类别是LITERATURE的图书列表。SQL>selecttitle,category2frombooks3wherecategory='literature';SQL>selecttitle,category2frombooks3wherecategory='LITERATURE';3.2比较运算符例3.7查询ISBN号为2147428890的书的ISBN号及书名。SQL>selectisbn,title2frombooks3whereisbn='2147428890';SQL>selectisbn,title2frombooks3whereisbn=2147428890;3.2比较运算符(2)日期规则Oracle9i默认使用DD-MM-YY显示日期,MON是月份的标准三个字母缩写。必须将日期值包括在单引号中。3.2比较运算符例3.8查询2001年1月21日出版的图书的书名、出版社编号和出版日期。SQL>selecttitle,pubdate,pubid2frombooks3wherepubdate='21-1月-2001';3.2比较运算符例3.9查询2001年之后出版的图书的ISBN、书名和出版日期。SQL>selectisbn,title,pubdate2frombooks3wherepubdate>'31-12月-2001';3.2比较运算符2、BETWEEN…AND运算符在查询时,如果要求某列的数值在某个区间范围内,则可以使用BETWEEN…AND运算符。

例3.10查询出版社编号在1到3之间的所有图书的书名和出版社编号。SQL>selecttitle,pubid2frombooks3wherepubidbetween1and3;3.2比较运算符例3.11查询出版日期在99年1月1日到01年12月31日之间的图书的书名及出版日期。SQL>selecttitle,pubdate2frombooks3wherepubdatebetween'01-1月-99'and'31-12月-01';3.2比较运算符3、IN运算符IN运算符返回与列出的值中指定的某一个值相等的记录。Oracle9i语法要求使用逗号将列出的项目分开,而且必须将整个列表都包括在圆括号中。例3.12查询编号为1、2、5的出版社所出版的图书书名及出版社编号。SQL>selecttitle,pubid2frombooks3wherepubidin(1,2,5);3.2比较运算符例3.13查询不在GA、FL和CA州居住的客户的姓氏、名字及所居住的州。SQL>selectfirstname,lastname,state2fromcustomers3wherestatenotin('GA','FL','CA');3.2比较运算符4、LIKE(模式匹配)运算符在查询时,经常需要对字符串进行比较。在比较中,有的要求两个字符串完全相同,有的要求部分字符相同,而其余的字符可以任意。LIKE运算符可以和通配符一起使用,用来查找与你所描述的模式相匹配的记录。LIKE提供两种通配符:1)百分号(%):表示“任意数量的字符”。2)下划线(_):表示“一个字符”。百分号和下划线可以在同一个搜索条件中使用,以便创建更为复杂的搜索模式。3.2比较运算符例3.14查询所有姓氏以字母P开始的客户的姓氏和名字。SQL>selectlastname,firstname2fromcustomers3wherelastnamelike'P%';3.2比较运算符例3.15customers表中客户编号为四位数字,查询客户编号的前两位数字是“1”和“0”,第三位是任意字符,最后一位数字是“9”的客户编号及姓氏、名字。SQL>selectcustomer#,lastname,firstname2fromcustomers3wherecustomer#like'10_9';3.2比较运算符例3.16查询ISBN号的第2位数字是4,最后一位数字是0的图书列表。SQL>selectisbn,title2frombooks3whereisbnlike'_4%0';3.2比较运算符例3.17查询出版社名字是以字母P打头,并且包含I的出版社信息。SQL>select*frompublisher2wherenamelike'P%I%';3.2比较运算符5、NULL值的比较我们使用的数据库一般是反映实际的具体情况,但有时某些数据在实际情况中还不存在。例如:CUSTOMERS表中有的客户是其他客户介绍的,有的不是。如果某个客户不是其他客户介绍的,那么他的REFERRED就不存在,即既不等于0、空格,也不等于某个值,而是一个未知的值,我们称他的REFERRED的值为空值。空值实际是指一种未知的、不存在的或不可应用的数据,通常用NULL表示。NULL仅仅是一个符号,它不等同于零和空格,所以NULL不能与等号之类的运算符连用。如果需要识别包含一个NULL值的记录,应该使用ISNULL比较运算符。3.2比较运算符例3.18向客户发货时,发货的日期会输入到ORDERS表中。如果Shipdate字段中没有显示一个日期,则表示还没有发货。请查询任何还没有发给客户的订单。SQL>selectorder#2fromorders3whereshipdateisnull;3.2比较运算符例3.19查询经由其他客户介绍的客户,并显示其介绍人的客户编号。SQL>selectcustomer#,lastname,firstname,referred2fromcustomers3wherereferredisnotnull;3.3逻辑运算符在WHERE子句中,也可以通过逻辑运算符连接多个条件,构成一个更复杂的条件进行查询。在WHERE子句中可以使用三种逻辑运算符:运算符含义NOT逻辑非。选择不满足条件的行。AND逻辑与。选择列值同时满足多个条件的行。OR逻辑或。选择列值满足任一条件的行。3.3逻辑运算符在WHERE子句中,比较运算符的优先级高于逻辑运算符。在逻辑运算符中,逻辑非(NOT)的优先级最高,逻辑与(AND)次之,逻辑或(OR)优先级最低。如果需要更改计算顺序,只需使用圆括号指定首先执行的运算符即可。3.3逻辑运算符例3.20查询由编号为3的出版社出版,并且属于Computer类的图书列表。SQL>selecttitle,pubid,category2frombooks3wherepubid=3and4category='COMPUTER';3.3逻辑运算符例3.21查询地址是以字母P开始的,或者邮编以3开始的客户信息。SQL>selectlastname,address,zip2fromcustomers3whereaddresslike'P%'orziplike'3%';3.3逻辑运算符例3.22查询成本高于15美元,并且由编号为4的出版社出版,或者属于Familylife类的图书列表。SQL>selecttitle,category,pubid,cost2frombooks3wherecategory='FAMILYLIFE'4ORpubid=45ANDcost>15;3.3逻辑运算符SQL>selecttitle,category,pubid,cost2frombooks3where(category='FAMILYLIFE'4ORpubid=4)5ANDcost>15;3.4ORDERBY子句SELECT语句获得的数据一般是没有按规律进行排序的。也就是说,这一次提取出的数据组的排列顺序与下一次提取出的数据组的排列顺序可以截然不同。所以为了方便阅读和使用,最好对查询结果进行一次排序。在成功地选择所要的数据后,可以利用ORDERBY子句对这些数据以某一列或数个列组合当作键值依序排列,排序的方向可以按键值由大到小或由小到大排列,这样,ORDERBY子句就为某个查询结果定义一个特定的行顺序。SELECT[DISTINCT|UNIQUE|ALL]{*

|{columnname|expr}[[AS]column_alias]

[,...n]}FROMtablename

[WHEREcondition]

[ORDERBY{expr[,expr]…| position[,position]…} column_alias[,alias] [ASC|DESC]]3.4ORDERBY子句例3.22查询出版社信息,并且按照出版社名字的升序排列。SQL>select*frompublisher2orderbyname;3.4ORDERBY子句1、排列规则按升序排列时,值将按照以下顺序列出:

1)数值

2)字符值

3)NULL值如果希望按升序排列,并且首先列出NULL值,可以在ORDERBY子句中添加NULLSFIRST。例3.23查询每个客户的地址信息,并且按照客户地址的升序排列。SQL>selectlastname,firstname,address2fromcustomers3orderbyaddress;3.4ORDERBY子句例3.24查询客户的姓氏、名字和介绍人的编号(referred),并且按照referred的升序排列。SQL>selectlastname,firstname,referred2fromcustomers3orderbyreferred;3.4ORDERBY子句例3.25查询客户的姓氏、名字和介绍人的编号(referred),并且按照referred的升序排列,并且首先列出NULL值。SQL>selectlastname,firstname,referred2fromcustomers3orderbyreferredNULLSFIRST;3.4ORDERBY子句2、降序排列除非指定了DESC以使用降序,否则在默认情况下,ORDERBY子句将按升序进行排列。例3.26查询每个客户的地址信息,并且按照客户地址的降序排列。SQL>selectlastname,firstname,address2fromcustomers3orderbyaddressdesc;3.4ORDERBY子句3、按列别名排序如果在SELECT语句中为一个列指定了列别名,而且在ORDERBY子句中也使用了这个列,那么可以在ORDERBY子句中使用相同的别名。例3.27题目同例3.23,查询每个客户的地址信息,并且按照客户地址的升序排列。SQL>selectlastname,firstname,2address"customeraddress"3fromcustomers4orderby"customeraddress";3.4ORDERBY子句4、按SELECT顺序排列ORDERBY子句还可以使用SELECT子句中的列的position(位置)来完成。例3.28题目同例3.23,查询每个客户的地址信息,并且按照客户地址的升序排列。SQL>selectlastname,firstname,address2fromcustomers3orderby3;3.4ORDERBY子句5、次排序在ORDERBY子句中只指定了一列时,称为“主排序”。如果主排序中的两行或更多行完全相同,那么“次排序”提供另一个进行排序的字段。选择按多列排序,首先由第一个列名确定顺序,若第一排序列值相同,再按第二个列名排序,第二排序列值相同,再按第三列排序,依此类推。如果按多列进行排序时,应分别指出它们相应的列名及有关的递增或递减方式。在OEDERBY子句中可以使用的列数限制是255。3.4ORDERBY子句例3.29查询客户信息,按照客户所居住的州的降序进行排序,如果有多个居住在某个特定州的客户时,将按城市的升序对客户进行排序。SQL>selectlastname,firstname,state,city2fromcustomers3orderbystatedesc,city;3.4ORDERBY子句注意:在SELECT子句中可以列出用于排序的列,也可以不列出用于排序的列。如果在SELECT子句中使用了DISTINCT或UNIQUE关键字,那么“只能”使用在SELECT子句中明确列出的列进行排序。DESC只应用于它之前的那一列。3.4ORDERBY子句例3.30查询客户信息,按照客户所居住的州的降序进行排序,如果有多个居住在某个特定州的客户时,将按城市的升序对客户进行排序,但是并不显示城市信息。SQL>selectlastname,firstname,state2fromcustomers3orderbystatedesc,city;3.4ORDERBY子句例3.31在例3.30的SELECT子句中使用DISTINCT关键字,查看结果。SQL>selectdistinctlastname,firstname,state2fromcustomers3orderbystatedesc,city;3.4ORDERBY子句例3.32查询订单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论