




免费预览已结束,剩余90页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle数据库应用技术项目化教程,新世纪高职高专软件技术专业系列规划教材,新世纪高职高专教材编审委员会组编,ORACLESHUJUKUJINGYONGJISHUXIANGMUHUAJIAOCHENG,任务4.1图书销售管理系统的简单数据查询,任务4图书销售管理系统的数据查询,预备知识,任务4.2图书销售管理系统中数据分组查询,任务4.3图书销售管理系统的多表连接数据查询,任务4.4使用子查询操作图书销售管理系统数据,任务实训学生管理系统的数据查询,拓展技能合并查询在图书管理系统中的应用,1.SELECT语句的基本语法2.单表数据查询的实现3.分组查询的实现4.多表连接查询的实现5.子查询和合并查询的实现,任务4,学习重点与难点,图书销售管理系统的数据查询,1.掌握使用SELECT语句实现查询部分列和所有列2.掌握ALL、DISTINCT的用法3.掌握使用WHERE子句查询选择满足条件的行4.掌握使用ORDERBY子句实现排序查询5.掌握在SELECT、INSERT、UPDATE语句中实现子查询,学习目标,任务4,图书销售管理系统的数据查询,预备知识,任务4,图书销售管理系统的数据查询,知识点2单表查询,知识点1SELECT语句的基本结构,知识点3多表连接查询,知识点4子查询,知识点1,任务4,图书销售管理系统的数据查询,SELECT查询语句在应用开发中使用最为频繁,也是重点学习的内容。SELECT可以从数据库中查询出你所需要的数据。其语法格式如下:SELECTDISTINCT|UNIQUE|ALLselect_listFROMdata_sourceWHERE子句GROUPBY子句HAVING子句ORDERBY子句语法说明如下:(1)大写单词为关键字。(2)DISTINCT|UNIQUE:取消重复行,如果返回结果中有重复行则只保留一行。(3)ALL:返回所有行,包括重复行,是未指定distinct|unique时的缺省选项。(4)select_list:表示要查询的列,多个查询列用逗号分隔,查询所有列时可以使用*代替。(5)data_source:表示查询的数据源,数据源可以是表、视图和子查询等。(6)WHERE:表示查询语句的选择条件,用于筛选满足条件的行。(7)GROUPBY:用于数据的分组查询。(8)HAVING:指定分组查询结果的输出条件,通常与groupby一起使用。(9)ORDERBY:对查询结果集进行排序。,知识点2,任务4,图书销售管理系统的数据查询,单表查询意味着数据源是单表,单表查询是应用开发中使用最为频繁,在单表查询中要学习查询列的使用方式、WHERE条件的使用方式、ORDERBY排序的使用方式以及GROUPBY分组的使用方式。1查询部分列查询列就是在查询结果集中要显示的数据列,其语法如下:*|query_name.*|schema.table|view.*|exprASc_alias,query_name.*|schema.table|view.*|exprASc_alias.语法说明如下:星号(*)代表所有列。query_name:表示子查询的名称。schema:表示二维表或视图所在的模式。expr:表示要查询的列名,也可以是表达式。AS:定义列别名时的关键字,可省略。c_alias:是列别名,在Oracle中不能使用“单引号”括起来,可以使用“双引号”或不用引号都可以。(1)查询所有列如果要查询一个数据表中的所有列时,可以使用星号(*)代替,但是为了提高SELECT语句的执行,知识点2,任务4,图书销售管理系统的数据查询,效率,最好不使用星号,而是把所有的列名都写出来。【示例4-1】查询供应商表中的所有列,代码如下:SQLSELECT*FROMsuppliers;SUPPLIER_IDSUPPLIER_NAMESUPPLIER_CITYSUPPERLIER_PERSONSUPPLIER_PHONE-1001大连新华书店辽宁大连张桥0411-881190181002瓦房店新华书店辽宁瓦房店李东新0411-856114501003金州新华书店大连市金州区刘志向0411-847526391004沈阳新华书店辽宁沈阳焦作志024-824536981005济南新华书店山东济南武立强0531-884506781006北京图书大厦北京孙国选择6行。(2)查询部分列如果要查询一个数据表中的部分列,需要把所查询的字段都列出来。【示例4-2】查询供应商表中的供应商编号(supplier_id)、供应商名称(supplier_name),及所在城市(supplier_city),代码如下:,任务4,图书销售管理系统的数据查询,知识点2,SQLSELECTsupplier_id,supplier_name,supplier_cityFROMsuppliers;SUPPLIER_IDSUPPLIER_NAMESUPPLIER_CITY-1001大连新华书店辽宁大连1002瓦房店新华书店辽宁瓦房店1003金州新华书店大连市金州区1004沈阳新华书店辽宁沈阳1005济南新华书店山东济南1006北京图书大厦北京已选择6行。(3)取消重复行默认的情况下,查询结果集中会包含重复的记录,如果要去掉查询结果集中的重复行,可以在查询列中使用DISTINCT或UNIQUE关键字。【示例4-3】从出版社表中查询所有的城市(press_city),取消重复行,代码如下:SQLSELECTDISTINCTpress_cityFROMpresses;PRESS_CITY-北京大连,任务4,图书销售管理系统的数据查询,知识点2,沈阳上海(4)使用列别名在查询时,通常会将字段名直接作为列名,如果希望查询结果中的某些列或所有的列显示时使用自己的列标题,通常给列指定一个别名。格式为:column_name|exprASc_alias说明:列别名可以使用双引号引注,也可以省略。字段与别名之间可以使用关键字AS,也可以省略。小提示:Oracle中的列别名不能使用单引号引注。【示例4-4】查询供应商表中的供应商编号(supplier_id)、供应商名称(supplier_name)及所在城市(supplier_city),分别用汉字指定别名,代码如下:SQLSELECTsupplier_idAS供应商编号,supplier_nameAS供应商名称,2supplier_city所在城市FROMsuppliers;供应商编号供应商名称所在城市-1001大连新华书店辽宁大连1002瓦房店新华书店辽宁瓦房店,任务4,图书销售管理系统的数据查询,知识点2,1003金州新华书店大连市金州区1004沈阳新华书店辽宁沈阳1005济南新华书店山东济南1006北京图书大厦北京已选择6行。(5)使用计算列计算列的数据在表中并不存在,而是通过表达式计算出来的。【示例4-5】查询图书库存表中每一本书的出版年限,代码如下:SQLSELECTbook_id,book_name,TO_NUMBER(TO_CHAR(SYSDATE,YYYY)-2TO_NUMBER(TO_CHAR(book_date,YYYY)AS出版年限3FROMbooks;BOOK_IDBOOK_NAME出版年限-10000001二维动画设计与制作4100000023dsMax2009中文版入门与提高4,任务4,图书销售管理系统的数据查询,知识点2,(6)使用常量表达式【示例4-6】在查询列中使用字符串“所在的城市是”作为一列值,代码如下:SQLSELECTsupplier_idAS供应商编号,supplier_nameAS供应商名称,所在的城市是,supplier_cityAS所在城市2FROMsuppliers;供应商编号供应商名称所在的城市是所在城市-1001大连新华书店所在的城市是辽宁大连1002瓦房店新华书店所在的城市是辽宁瓦房店1003金州新华书店所在的城市是大连市金州区1004沈阳新华书店所在的城市是辽宁沈阳1005济南新华书店所在的城市是山东济南1006北京图书大厦所在的城市是北京已选择6行。(7)连接字符串【示例4-7】使用字符串连接符“|”将字符串与列名连接,组成一个新列进行显示,代码如下:SQLSELECTcityof|SUPPLIER_NAME|is|SUPPLIER_CITY供应商所在的城市2FROMsuppliers;,任务4,图书销售管理系统的数据查询,知识点2,供应商所在的城市-cityof大连新华书店is辽宁大连cityof瓦房店新华书店is辽宁瓦房店cityof金州新华书店is大连市金州区cityof沈阳新华书店is辽宁沈阳cityof济南新华书店is山东济南cityof北京图书大厦is北京已选择6行。2WHERE子句WHERE子句的作用是选择满足条件的行,即使得WHERE条件为真的数据行返回到查询结果集中。WHERE条件是由各种操作符、谓词和列名组成的一个判定条件的逻辑表达式,常用的操作符如表4-1所示:,表4-1操作符,任务4,图书销售管理系统的数据查询,知识点2,(1)使用关系操作符数字、字符串、日期类型的数据可以使用关系操作符。【示例4-8】查询2010年2月1日销售的图书信息,代码如下:SQLSELECT*FROMsaleorders2WHEREsale_date=01-2月-10;SALE_IDBOOK_IDSALE_DATESALE_NUMSALE_PRICECLIENT_IDEMP_ID-XSD0000001100000011-2月-10129.50KH001u1001XSD0000001100000021-2月-10159KH001u1001(2)使用逻辑操作符逻辑操作符的优先级比较低,Oracle提供了与、或、非三种逻辑运算。逻辑值有三个:FALSE,TRUE,NULL。下面是三种逻辑操作的真值表:,任务4,图书销售管理系统的数据查询,知识点2,表4-2逻辑操作真值表,任务4,图书销售管理系统的数据查询,知识点2,任务4,图书销售管理系统的数据查询,知识点2,【示例4-9】查询图书号(book_id)为“10000001”,且经手人(emp_id)为“u1001”的图书销售信息,代码如下:SQLSELECT*FROMsaleorders2WHEREbook_id=10000001ANDemp_id=u1001;SALEORDER_IDBOOK_IDSALE_DATESALE_NUMSALE_PRICECLIENT_IDEMP_ID-XSD00000011000000101-2月-10129.5KH001u1001XSD00000121000000111-9月-10129.5KH002u1001XSD00000171000000111-10月-10129.5KH001u1001(3)使用谓词操作符1)NOTBETWEENAND语法:expr1NOTBETWEENexpr2ANDexpr3功能是:判断expr1值是否在expr2与expr3构成的闭区间内。expr2是下限值,expr3是上限值,而且下限值小于等于上限值。小提示:expr1BETWEENexpr2ANDexpr3等价于:expr2SELECT*FROMsaleorders2WHEREsaleorder_idIN(XSD0000001,XSD0000002);SALE_IDBOOK_IDSALE_DATESALE_NUMSALE_PRICECLIENT_IDEMP_ID-XSD00000011000000101-2月-10129.5KH001u1001XSD00000011000000201-2月-10159KH001u1001XSD00000021000000306-3月-10243KH002u10043)ANY语法:exprANY(list|subquery)功能是:expr与列表(或子查询结果集)中的值进行顺序比较,只要其中某一次比较结果为真,WHERE条件就为真。ANY之前必须使用=,!=,=比较操作符。ANY之后可以是任何列表或子查询。【示例4-12】查询销售单号(saleorder_id)大于等于“XSD0000018”、“XSD0000020”中任意一个的图书销售信息,代码如下:SQLSELECT*FROMsaleorders2WHEREsaleorder_id=ANY(XSD0000018,XSD0000020);,任务4,图书销售管理系统的数据查询,知识点2,SALEORDER_IDBOOK_IDSALE_DATESALE_NUMSALE_PRICECLIENT_IDEMP_ID-XSD00000181000000411-10月-10155KH003u1002XSD00000181000003615-11月-10333KH003u1002XSD00000201000000215-11月-10159KH009u1001XSD00000201000003816-11月-10335KH009u1001XSD00000201000003917-11月-10232KH009u1001XSD00000201000000818-11月-10227KH009u10014)ALL语法:exprALL(list|subquery)功能是:表达式expr的值与列表(或子查询结果集)中的值进行顺序比较,当所有的比较结果都为真,WHERE条件才为真。ALL之前必须使用=,!=,=比较操作符。ALL之后可以是任何列表或子查询。ANY与ALL的用法比较如下表4-3所示。,任务4,图书销售管理系统的数据查询,知识点2,任务4,图书销售管理系统的数据查询,知识点2,图1-2需分析的方法,表4-3ANY与ALL的用法比较,任务4,图书销售管理系统的数据查询,知识点2,【示例4-13】查询销售单号(saleorder_id)都大于等于XSD0000018、XSD0000020的图书销售信息,代码如下:SQLSELECT*FROMsaleorders2WHEREsaleorder_id=ALL(XSD0000018,XSD0000020);SALE_IDBOOK_IDSALE_DATESALE_NUMSALE_PRICECLIENT_IDEMP_ID-XSD00000201000000215-11月-10159KH009u1001XSD00000201000000818-11月-10227KH009u1001XSD00000201000003816-11月-10335KH009u1001XSD00000201000003917-11月-10232KH009u10015)NOTLIKE该谓词用于模糊查询,可以查询满足一定模糊条件的数据。语法:char1NOTLIKEchar2功能是:判断char1是否与模式串char2匹配,当匹配时返回真。char1表示搜索字符串,char2表示模式串,在模式串中可以使用两种通配符:下划线(_)、百分号(%),下划线只匹配一个字符,百分号可以匹配零个或多个字符。,任务4,图书销售管理系统的数据查询,知识点2,【示例4-14】查询联系电话(supplier_phone)的区号为“0411”的供应商信息,代码如下:SQLSELECT*FROMsuppliers2WHEREsupplier_phoneLIKE0411%;SUPPLIER_IDSUPPLIER_NAMESUPPLIER_CITYSUPPERLIER_PERSONSUPPLIER_PHONE-1001大连新华书店辽宁大连张桥0411-881190181002瓦房店新华书店辽宁瓦房店李东新0411-856114501003金州新华书店大连市金州区刘志示例4-15】查询姓“张”的名为单字的供应商信息,代码如下:SQLSELECT*FROMsuppliers2WHEREsupplier_personLIKE张_;SUPPLIER_IDSUPPLIER_NAMESUPPLIER_CITYSUPPERLIER_PERSONSUPPLIER_PHONE-1001大连新华书店辽宁大连张知识点2,任务4,图书销售管理系统的数据查询,3ORDERBY子句语法格式如下:ORDERBYexpr|position|c_aliasASC|DESCNULLSFIRST|NULLSLAST,expr|position|c_aliasASC|DESCNULLSFIRST|NULLSLAST.语法说明如下:该子句的作用是对查询结果集进行排序。排序列可以用表达式expr指定,可以用列序号position指定,也可以用列别名c_alias指定,这三种指定排序列的方式都可以,建议不要使用position的方式,因为可读性差、可移植性差。排序有两种方式:升序和降序。ASC表示升序,DESC表示降序,ASC是缺省值。NULLSFIRST表示空值在排序中先出现,NULLSLAST表示空值在排序中先出现。排序可以使用多列排序,每列都要指定升序或降序,默认升序。排序列从左到右依次为主排序列、次排序列等等,依次类推。多列排序其实就是多级排序,即对主排序列中具有相同值的行,再按照次排序列进一步排序,依次类推可以形成多级排列。与EXCEL中的排序类似。【示例4-16】查询图书的书号(book_id),书名(book_name),出版日期(book_date,)和类型号(type_id),并按类型号升序排序,类型相同按出版日期降序排序,代码如下:SQLSELECTbook_id,book_name,book_date,type_idFROMbooks2ORDERBYtype_idASC,book_dateDESC;,知识点2,任务4,图书销售管理系统的数据查询,BOOK_IDBOOK_NAMEBOOK_DATETYPE_ID-10000003GlobusToolkit409-11月-09D10000033国际结算06-4月-09F10000018饭店吸引顾客的72个细节17-4月-08F10000015中小企业财务管理工具箱07-4月-08F10000004人类传播理论11-11月-09G10000031新编商务英语听说教程教师用书06-11月-09G4GROUPBY与HAVING子句在实际应用开发中,要经常汇总数据,汇总之前通常要先分组,然后统计每个分组的数据。例如,统计每个销售单的图书销售总数量、供应商总数等。在关系数据库中,数据的分组是用GROUPBY子句实现的,聚合函数可以在分组上实现汇总统计。如果要限定某些分组结果的输出,则使用HAVING子句指定分组的输出条件。在介绍GROUPBY之前先介绍一下聚合函数。(1)聚合函数聚合函数也称分组函数、集合函数等,与前面介绍的单行函数是不同的,集合函数作用于多行数据,并且返回一行汇总结果。一般情况下,聚合函数要与GROUPBY结合使用。如果仅用聚合函数而不用GROUPBY,则把“全部行”作为一组数据进行处理,只返回一行汇总结果。常用聚合函数如下表4-4所示:,知识点2,任务4,图书销售管理系统的数据查询,表4-4常用聚合函数,小提示:聚合函数只能出现在查询列、HAVING和ORDERBY子句中,而不能出现在FROM、WHERE、GROUPBY子句中。除了COUNT(*)之外,其它函数都会忽略空值,注意COUNT(*)与COUNT(列名)的值可能是不同的。聚合函数可以使用两个关键字:ALL和DISTINCT,ALL表示包括重复行在内的所有行,DISTINCT表示去掉重复行,ALL是默认选项。,知识点2,任务4,图书销售管理系统的数据查询,【示例4-17】查询销售单表中的所销售图书的最高图书单价,代码如下:SQLSELECTMAX(sale_price)最高图书单价FROMsaleorders;最高图书单价-98(2)GROUPBY与HAVING子句GROUPBY子句是用于对查询数据的分组统计,每个分组返回一行结果,HAVING子句的作用是限制分组结果的显示。HAVING子句不能单独使用,必须配合GROUPBY一起使用。语法如下:GROUPBYexpr|ROLLUP|CUBE(expr,expr.)|GROUPINGSETS(expr,expr.),expr|ROLLUP|CUBE(expr,expr.)|GROUPINGSETS(expr,expr.).HAVINGcondition,知识点2,任务4,图书销售管理系统的数据查询,语法说明如下:expr是分组列,GROUPBY子句依据分组列的值进行分组,即在分组列上具有相同值的数据行作为一组。ROLLUP实现横向小计与总计,CUBE实现横向小计、纵向小计以及总计。GROUPINGSETS用于合并多种分组的统计结果。HAVING是关键字,condition是限定分组输出的条件,该子句是可选项。如果使用GROUPBY子句进行数据分组,则查询列要么出现在聚合函数中,要么出现在GROUPBY子句中,否则系统会报错。分组结果的排序默认是升序,可以使用ORDERBY改变分组查询的排序方式。GROUPBY子句、HAVING子句、WHERE子句、ORDERBY子句、聚合函数的执行顺序依次是:WHERE子句、GROUPBY子句、聚合函数、HAVING子句、ORDERBY子句【示例4-18】在图书库存表中,统计每种图书类型的图书数量和平均单价,代码如下:SQLSELECTtype_id,sum(book_num)图书数量,AVG(book_price)平均单价FROMbooks2GROUPBYtype_id;TYPE_ID图书数量平均单价-V3065R423.8,知识点2,任务4,图书销售管理系统的数据查询,D643T25043.33125X816J936O1429Z10233.2857143G14131.7142857S1219F10434.2已选择11行。【示例4-19】统计图书库中各出版社库存图书数量和金额,并按出版社号(press_id)升序排序,代码如下:SQLSELECTpress_id出版社号,SUM(book_num)库存数量,sum(book_num*book_price)金额2FROMbooks3GROUPBYpress_idORDERBYpress_id;,知识点2,任务4,图书销售管理系统的数据查询,出版社号库存数量金额-100001391477.5100002491613.8100003196081000041155455100005166021000066923811000071745634.6100008571761200001501300200002351002300002571935已选择11行。【示例4-20】统计每个销售人员销售的图书数量在15册以上的经手人和图书数量合计,代码如下:SQLSELECTemp_id销售员,SUM(sale_num)图书数量FROMsaleorders3GROUPBYemp_idHAVINGSUM(sale_num)15;销售员图书数量-u100221u100119,知识点3,任务4,图书销售管理系统的数据查询,连接查询是指查询的数据来自多个数据源,数据源通过逻辑关系相连接。连接分为内连接、外连接和交叉连接。内连接有等值连接和非等值连接,等值连接中有一种特殊的连接叫自然连接。外部连接有左外连接、右外连接和全外连接。一个表也可以连接自身,称之为自身连接。在多表连接查询中,各个表中经常有同名列,为了区分同名列必须使用表名作为列的前缀,但有的表名特别长,为了简化代码,通常给表起别名,用表别名作列名的前缀,使得代码更加简洁清晰。表别名的使用与列别名是一样的,不能使用单引号。小提示:列名与列别名之间可以使用关键字AS,而表名与表别名之间不能使用AS。1内连接内部连接就是返回满足连接条件的行。内部连接条件可以写在FROM中,也可以写在WHERE子句中,建议在WHERE子句中指定连接条件。等值连接是连接条件使用“=”号时的特例。自然连接是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性,并且去掉结果中的重复列。两者之间的区别和联系如下:自然连接一定是等值连接,但等值连接不一定是自然连接。等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两个关系必须有同名属性才能进行自然连接。等值连接不会去掉重复列,而自然连接会去掉重复列。等值连接是我们经常使用的,而且连接条件通常放在WHERE子句中。,知识点3,任务4,图书销售管理系统的数据查询,(1)内部连接的语法FROMtablet_aliasINNERJOINtablet_aliasONcondition,INNERJOINtableONcondition说明:table是连接表,t_alias是表的别名,INNER表示内连接,condition表示连接条件,如果连接条件使用等号,则表示等值连接。内部连接必须指定连接条件。(2)自然连接语法形式一:FROMtableNATURALJOINtable形式二:FROMtableINNERJOINtableUSING(column)说明:在第一形式中NATURAL表示自然连接,蕴含了两个表的公共字段作为等值连接条件。USING(column):在内连接中使用USING指定公共字段作为等值连接条件,同样可以实现自然连接。【示例4-21】将入库单表(entryorders)和供应商(suppliers)表进行等值连接,检索供应商为“大连新华书店”的入库单单号(entryorder_id)、图书编号(book_id)和供应商名称(supplier_name)信息,代码如下:,知识点3,任务4,图书销售管理系统的数据查询,SQLSELECTE.entryorder_id,E.book_id,S.supplier_name2FROMentryordersEINNERJOINsuppliersSONE.supplier_id=S.supplier_id3WHERES.supplier_name=大连新华书店;ENTRYORDER_IDBOOK_IDSUPPLIER_IDSUPPLIER_NAME-RKD0000001100000011001大连新华书店RKD0000004100000041001大连新华书店RKD0000007100000071001大连新华书店RKD0000008100000081001大连新华书店【示例4-22】多表连接时建议采用下面的形式,在WHERE子句中指定连接条件,通常会使用表别名作列名的前缀,使得代码比较清晰,具备较好的可阅读性。代码如下:SQLSELECTE.entryorder_id,E.book_id,S.supplier_name2FROMentryordersEINNERJOINsuppliersSONE.supplier_id=S.supplier_id3WHERES.supplier_name=大连新华书店;,知识点3,任务4,图书销售管理系统的数据查询,ENTRYORDER_IDBOOK_IDSUPPLIER_NAME-RKD000000110000001大连新华书店RKD000000410000004大连新华书店RKD000000710000007大连新华书店RKD000000810000008大连新华书店RKD000001010000010大连新华书店RKD000001110000011大连新华书店自然连接是在两个表中寻找列明和数据类型都相同的字段,通过相同的字段将两个表连接在一起,并返回所有符合条件的结果,且在结果集中去掉重复列。【示例4-23】使用USING关键字将入库单表(entryorders)和供应商(suppliers)表进行自然连接,检索供应商为“大连新华书店”的入库单单号(entryorder_id)、图书编号(book_id)、供应商编号(supplier_id)和供应商名称(supplier_name)信息,代码如下:SQLSELECTentryorder_id,book_id,supplier_id,supplier_name2FROMentryordersEINNERJOINsuppliersSUSING(supplier_id)3WHERES.supplier_name=大连新华书店;,知识点3,任务4,图书销售管理系统的数据查询,ENTRYORDER_IDBOOK_IDSUPPLIER_IDSUPPLIER_NAME-RKD0000001100000011001大连新华书店RKD0000004100000041001大连新华书店RKD0000007100000071001大连新华书店RKD0000008100000081001大连新华书店RKD0000010100000101001大连新华书店RKD0000011100000111001大连新华书店【示例4-24】使用NATURALJOIN关键字将入库单表(entryorders)和供应商(suppliers)表进行自然连接,检索供应商为“大连新华书店”的入库单单号(entryorder_id)、图书编号(,book_id)、供应商编号(supplier_id)和供应商名称(supplier_name)信息,代码如下:SQLSELECTentryorder_id,book_id,supplier_id,supplier_name2FROMentryordersENATURALJOINsuppliersS3WHERES.supplier_name=大连新华书店;查询结果同示例【4-26】所示。小提示:Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,而那些可以过滤掉最大数量记录的条件尽量写在WHERE子句的末尾。,知识点3,任务4,图书销售管理系统的数据查询,2外连接外部连接与内部连接不同,外部连接会返回FROM子句中指定的至少一个表或视图的所有行。左外连接将返回左表的所有行,右外连接将返回右表的所有行,全外连接将返回两个表的所有行。语法格式:FROMtable1FULL|LEFT|RIGHTOUTERJOINtable2ONcondition说明:table1表示左表,table2表示右表,FULL表示全外连接,LEFT表示左外连接,RIGHT表示右外连接,OUTER表示外连接,是可选项。condition表示连接条件,是可选项。(1)左外连接左外连接将返回左表的所有行,如果右表没有满足连接条件的行将显示NULL值。(2)右外连接右外连接将返回右表的所有行,如果左表没有满足连接条件的行将显示NULL值。(3)全外连接全外连接将返回两个表的所有行。相当于左外连接与右外连接的并集。3交叉连接交叉连接在理论上也称笛卡尔乘积,假设两个表A、B,分别有n、m行,A、B表的交叉连接就是A表中的每一行与B表的m行都进行连接,总共连接成n*m行,这就是交叉连接,在实际开发中很少应用。交叉连接的语法如下:table1CROSSJOINtable2说明:table1表示左表,table2表示右表,CROSS表示交叉连接。,知识点3,任务4,图书销售管理系统的数据查询,出版社号库存数量金额-100001391477.5100002491613.8100003196081000041155455100005166021000066923811000071745634.6100008571761200001501300200002351002300002571935已选择11行。【示例4-20】统计每个销售人员销售的图书数量在15册以上的经手人和图书数量合计,代码如下:SQLSELECTemp_id销售员,SUM(sale_num)图书数量FROMsaleorders3GROUPBYemp_idHAVINGSUM(sale_num)15;销售员图书数量-u100221u100119,知识点3,任务4,图书销售管理系统的数据查询,【示例4-25】将供应商表(suppliers)和入库单表(entryorders)进行交叉连接,代码如下:SQLSELECT*FROMsuppliersCROSSJOINentryorders;SUPPLIER_IDSUPPLIER_NAMESUPPLIER_CITYSUPPLIER_PERSONUPPLIER_PHONETYPE_IDTYPE_NAME-1001大连新华书店辽宁大连张马克思主义义1001大连新华书店辽宁大连张哲学、宗教1001大连新华书店辽宁大连张社会科学总论1001大连新华书店辽宁大连张政治、法律1001大连新华书店辽宁大连张军事,知识点4,任务4,图书销售管理系统的数据查询,子查询(广义上的)就是嵌入到其它SQL语句(SELECT、INSERT、UPDATE、DELETE等)中的SELECT语句。如果子查询嵌入到一个查询语句的WHERE子句中,称之为嵌套查询,外部查询也称父查询,内部查询也称子查询(狭义上的)。子查询在WHERE子句中的嵌套层数是有限制的,Oracle11G允许的嵌套层数为255层。如果一个子查询嵌入到FROM子句中,称之为内联视图,内联视图的嵌套层数是没有限定的。子查询分为相关子查询和非相关子查询。非相关子查询是独立于外部查询的子查询,子查询仅执行一遍,执行完毕后将结果传递给外部查询。而相关子查询的执行依赖于外部的查询,外部查询每处理一行,子查询就执行一次。如果父查询处理了n行,子查询就要执行n次。注意,只能在SELECT、UPDATE、DELETE语句中使用相关子查询。子查询主要有以下用途:(1)在INSERT语句或CREATETABLE语句中使用子查询,可以把子查询的查询结果插入到目标数据表中;(2)在CREATEVIEW中使用子查询可以定义视图的数据;(3)在UPDATE语句中使用子查询可以更新一列或多列数据;(4)在FROM子句中使用子查询可以提供更加灵活的数据源;(5)在WHERE子句中使用子查询可以查找某列的MAX、MIN、AVG值等,用于比较操作。根据子查询返回结果的不同,子查询可以分为单行子查询、多行子查询和多列子查询。单行子查询,知识点4,任务4,图书销售管理系统的数据查询,是指返回一行数据的子查询,多行子查询是指返回多行数据的子查询,多列子查询是指返回多列数据的子查询。1.在FROM子句中使用子查询子查询在FROM子句中可以作为数据源使用,也就是说,数据源可以是一个子查询的结果集。比如,查询销量前4名的图书信息:在SQLSERVER中可以使用关键字TOP与ORDERBY来实现,而Oracle没有提供TOP关键字,所以使用一个简单的查询是难以实现的。但可以使用Oracle提供的伪列及子查询来实现这个任务,下面先介绍一下伪列的概念。伪列(PSEUDOCOLUMN)表面上与表中的列(COLUMN)类似,但伪列在表中并不存储。伪列值可以查看,但不能进行插入、修改以及删除操作。伪列类似于无参的函数,但注意,无参函数为每一行都返回相同的值,而伪列为每一行返回不同的值。Oracle中的伪列比较多,这里主要介绍伪列ROWNUM,其它伪列请参考帮助文档。伪列ROWNUM可以为结果集的每一行产生一个数字序号,从1开始,第一行是1,第二行是2,依次类推。下面的例子将使用ROWNUM限制返回的行数。注意,ROWNUM伪列值先于排序产生,所以不能先限定行数再排序,必须是先排序再限定行数。【示例4-26】查询销量前4名的图书名称(book_name)、销售总量,子查询实现了排序功能,父查询实现了限定行数的功能,代码如下:,知识点4,任务4,图书销售管理系统的数据查询,SQLSELECTS.book_name,S.销售总量2FROM(SELECTsaleorders.book_id,book_name,SUM(sale_num)AS销售总量3FROMsaleorders,booksWHEREsaleorders.book_id=books.book_id4GROUPBYsaleorders.book_id,book_name5ORDERBY销售总量DESC)S6WHEREROWNUM,=,SELECTbook_id,book_numFROMbooks2WHEREbook_numall(SELECTbook_num3FROMbooks4WHEREbook_id=10000001ORbook_id=10000002);,知识点4,任务4,图书销售管理系统的数据查询,BOOK_IDBOOK_NUM-10000013141000003415100000331610000031173.在INSERT语句中使用子查询在INSERT语句中使用VALUES只能插入一行数据,如果要实现数据的批量插入,就必须在INSERT语句中使用子查询。【示例4-29】新建一个供应商临时表suppliers1,将供应商表中的信息装载到suppliers1表中,代码如下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年呼吸内科呼吸系统疾病筛查考试答案及解析
- 民族团结创建课件
- 2025年皮肤科疾病诊断与治疗学习问答答案及解析
- 2025年康复理疗技术操作评估答案及解析
- 民族内涵课件
- 2025年肿瘤科学病理解读讨论答案及解析
- 2025年麻醉学临床技能操作模拟考试答案及解析
- 2025年消化内科病例分析训练总结卷答案及解析
- 2025年危重病房监护常规操作考核答案及解析
- 变间隙密封液压缸:间隙精准测量与唇边疲劳寿命的深度剖析
- 航海概论航海技术臧继明课件
- 急性脑梗死静脉溶栓护理查房
- 2024年中国农业银行秋季校园招聘考试真题及答案
- 乡村医生药品管理培训
- 医院培训课件:《危重病人心电监测》
- 医院规培合同范本
- 银行贷款电子合同电子版(2025年版)
- 非物质文化遗产微短剧叙事策略与文化传承路径研究
- 胫腓骨骨折内固定术手术配合
- 隔物灸技术课件完整版
- 标本的安全运送
评论
0/150
提交评论