MySQL数据库技术与项目应用教程(微课版)(人邮 )-教案项目四 查询数据.docx

上传人:太** 文档编号:74342636 上传时间:2023-02-25 格式:DOCX 页数:31 大小:85.98KB
返回 下载 相关 举报
MySQL数据库技术与项目应用教程(微课版)(人邮 )-教案项目四 查询数据.docx_第1页
第1页 / 共31页
MySQL数据库技术与项目应用教程(微课版)(人邮 )-教案项目四 查询数据.docx_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《MySQL数据库技术与项目应用教程(微课版)(人邮 )-教案项目四 查询数据.docx》由会员分享,可在线阅读,更多相关《MySQL数据库技术与项目应用教程(微课版)(人邮 )-教案项目四 查询数据.docx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、备 课 纸课题工程四查询数据课时8+8课时教学目的。会使用SELECT语句从表中检索数据令会根据条件筛选指定的数据行令会使用聚合函数分组统计数据今会使用内连接、外连接和交叉连接及联合条件连接查询多表数据个 会使用比拟运算符及IN、ANY、EXISTS等关键字查询多表数据重 点O使用SELECT语句从表中检索数据 会根据条件筛选指定的数据行 会使用聚合函数分组统计数据今会使用内连接、外连接和交叉连接及联合条件连接查询多表数据 会使用比拟运算符及IN、ANY、EXISTS等关键字查询多表数据难 点今使用聚合函数分组统计数据今使用内连接、外连接和交叉连接及联合条件连接查询多表数据 数据库系统作为数据

2、存储的仓库,不能仅仅只起到容器的作用,同时还需要担当起数据的管理,维护的角色。 数据查询对工作、生活的影响学生讨论 网上商城系统的用户有哪些? 常用的操作有哪些?-学生讨论,导出查询在数据库操作中的作用。适用班级:P.学习提示NULL表示不确定,不等同于数值0或空字符,除“”运算符能与NULL 比拟外,不能使用其他比拟运算符或者LIKE运算符对NULL进行判断。8.使用DISTINCT消除重复结果集当查询结果集的数据重复时,可使用DISTINCT关键字去除重复的结果集【例4.251查询users表,列出用户来源的城市。实例演示SELECT DISTINCT ucity FROM users ;

3、 使用LIMIT关键字限制返回记录数SELECT语句中的LIMIT子句可以限制返回记录的数量。并能指定查询结果从 哪一条记录开始语法格式LIMIT OFFSET, 记录数其中参数OFFSET表示偏移量,假设偏移量为0,查询结果从第1条记录开始,偏 移量为1时那么从查询结果的第2条记录开始,依次类推。OFFSET为可选项,默 认值为0。记录数那么表示返回记录的行数。【例4. 26】查询goods表,列出前3行商品的id、商品名称、价格。实例演示SELECT gid, gname, gprice, gsale_qty FROM goodsLIMIT 3 ;【例4. 27查询goods表,列出第4至

4、第6行商品的id、名称、价格和销售量。实例演示SELECT gid, gname, gprice, gsale_qty FROM goodsLIMIT 3, 3 ;结果分析根据查询需求,需设定OFFSET值为3,表示从第4行记录开始;设置记录数 为3,表示结果集返回3行记录 使用CASE表达式更改查询结果MySQL中,可以将CASE表达式嵌在SELECT语句中,实现对查询结果数据 的变更P.适用班级:1. CASE简单结构CASE简单结构将表达式与一组确切的数据值进行比拟返回相应结果:语法格式CASE表达式WHEN数值1 THEN结果值1WHEN数值2 THEN结果值2ELSE结果值。END

5、AS新列名【例4.28查询goods表,列出所有商品的名称和销售情况(goods_status),其 中销售情况值根据gishot列的值确定,当gishot为1时值为“热销”,值为0 时值为“非热销”实例演示SELECT gname, gsale_qty, CASE gishotWHEN 1 THEN,热销,ELSE,非热销,END AS goods_status FROM goods2.CASE搜索结构语法格式CASEWHEN条件1 THEN结果值1WHEN条件2 THEN结果值2ELSE结果值nEND AS新列名【例4.29】查询users表,列出前5名用户的用户名和积分,并根据积分的取值

6、 生成新的列“grade”以标识用户的等级,当积分在100分及以上,钻石会员, 当积分在50及以上时为黄金会员,其余为普通会员。实例演示SELECT uname, ucredit, CASEWHEN ucredit = 100 THEN 钻石会员WHEN ucredit = 50 THEN 黄金会员ELSE,普通会员,END AS gradeFROM usersLIMIT 5 ;适用班级:P.任务2排序和统计分析单表数据任务描述实际应用中,除查询基本数据外,还需要对数据做排序、统计及分析等操作, 以方便用户对数据进行基本的分析。数据排序强调指出设 定格式的输 出只会改变 数据的表示 方法ORD

7、ER BY子句可以对结果集进行升序(ASC)和降序(DESC)排列。ORDER BYk列名|表达式|正整数、ASC | DESC,n【例4. 30查询goods表,找出类别ID (cid)为1的商品名称、价格和销售 量,并按价格升序排列。SELECT gname, gprice, gsale_qty FROM goodsWHERE cid = 1ORDER BY gprice ;课堂练习【例4.31】查询goods表,找出类别ID (cid)为1的商品名称、价格和销售 量,并按价格升序排列,当价格相同时按销量降序排列。学生演示SELECT gname, gprice, gsale_qty FR

8、OM goodsWHERE cid = 1ORDER BY gprice, gsale_qty DESC ;学习提示当指定的排序关键列有多个时,应分别指出各列的升序或降序选项。数据分组统计对表进行数据查询时,通常需要对查询结果集进行计算和统计。在SELECT语句中,使用聚合函数、GROUP BY子句能够实现对查询结果集进行分组和统计等操作L使用聚合函数知识点介绍聚合函数能够实现对数据表中指定列的值进行统计计算,并返回单个数值。聚 合函数主要应用在GROUP BY子句中,用来对查询结果进行分组、筛选或统 计。适用班级:P.精讲函数名说 明,函数名说 明。SUM。返回组中所有值的和,AVG-返回组

9、中各值的平均值。MAXa返回组中的最大值。MIN-返回组中的最小值”COUNT。返回组中的值数GROUPING标识每个分组的汜掰亍GROUP_CONCAT返回由分组中的值连接组 合而成字符串(1) SUM、AVG、MAX 和 MIN 函数。语法格式SUM/AVG/MAX/MIN (ALL1 DISTINCT 列名常量表达式)【例4.32查询goods表,统计所有商品的总销售量。实例演示SELECT SUM(gsale_qty) FROM goods ;【例4.331查询goods表,统计商品的最高价格和最低价格。SELECT MAX(gprice), MIN(gprice) FROM good

10、s ;(2) COUNT 函数COUNT ( ALLDISTINCT 列名常量表达式、1 * )【例4.34查询users表,统计用户总人数。SELECT COUNT (*) FROM users ;【例4.351查询orders表,统计购买过商品的用户人数。SELECT COUNT(DISTINCT uid) FROM orders ;学习提示COUNT(*)不能与DISTINCT 一起使用。 GROUP BY 子句问题情景在销售管理系统,需要统计各业务员的月销售总量时,应怎样实现?回顾计算机基础EXCEL中的分类与汇总适用班级:P.使用GROUP BY子句那么可以按指定的列对查询结果集进行

11、分组,并使用聚合 函数为结果集中的每个分组产生一个汇总值。语法格式GROUP BY ALL 歹!名 1,歹U名 2 ,.n WITH ROLLUP HAVING 条件表 达式学习提示实际应用中,GROUP BY子句使用时都会与聚合函数一起。【例4.361查询users表,统计各城市的用户人数。实例讲解SELECT ucity, COUNT(*) FROM usersGROUP BY ucity ;实例讲解【例4.371查询users表,按性别统计年龄的最小值,列名为min_age。SELECT ugender, min(year(CURRENT_DATE)-year(ubirthday) AS

12、 min_age FROM usersGROUP BY ugender ;使用GROUP BY进行数据分组时,还可以同时对多列进行交叉分组。实例讲解【例4.38】查询users表,按城市统计各性别的用户数,列名为city_nums,并 按城市排序。SELECT ucity, ugender, count (*) AS city_nums FROM usersGROUP BY ucity, ugenderORDER BY ucity;结果分析从结果可以看出,查询对用户表中的城市和性别两列进行了交叉统计,分别统 计出了每个城市男性和女性的人数。(3) GROUP BY 和 GROUP_CONCAT

13、 一起使用GROUP BY和GROUP_CONCAT一起使用,能实现同一分组中某个列的数据 值按指定的分隔符连接起来。语法解释GROUP_CONCAT ( DISTINCT表达式ORDER BY 列名1 SEPARATOR 分解符)适用班级:实例讲解【例4.39查询users表,将同一城市的uid值用逗号连接起来,列名为 uidsoSELECT ucity, GROUP_CONCAT(uid) as uids FROM usersGROUP BY ucity ;课堂练习【例4.401查询users表,将同一城市的uid值用下划线“,连接起来,列名 为 uido学生演示SELECT uCity,

14、 GROUP_CONCAT(uid ORDER BY uid SEPARATOR) as uidFROM usersGROUP BY ucity ;学习提示GROUP_CONCAT函数必须跟GROUP BY子句一起使用。(4) GROUP BY 和 WITH ROLLUP 一起使用GROUP BY和WITH ROLLUP一起使用时,除统计每个分组值外,会增加额 外的汇总行。【例4.41修改例【4.36,为查询结果添加汇总行。实例演示SELECT ucity, COUNT(*) FROM users GROUP BY ucity WITH ROLLUP ;MySQL8.0+提供新的聚合函数GRO

15、UPING,可以标明这行数据是汇总数据行 还是分组数据行。GROUPING1歹4名、【例4.421修改例【4.38,为查询结果添加汇总行,并标识该行是对哪一列 数据的汇总。P.备 课 纸适用班级:P.实例演示SELECT ucity, ugender, count (*) AS city_numsz GROUPING(ucity) as grp_cityz GROUPING(ugender) as grp_gender FROM usersGROUP BY ucity, ugenderWITH ROLLUP ;学习提示GROUPING函数必须跟WITH ROLLUP关键字一起使用(5) GRO

16、UP BY 和 HAVING 一起使用知识点介绍HAVING关键字也是用来指定筛选条件,但它只能跟GROUP BY一起使用, 用于对分组后的结果集进行筛选。【例4.43】查询users表,统计各城市的用户人数,显示人数在3人及以上的 城市。实例演示SELECT ucity, COUNT(*)FROM usersGROUP BY ucityHAVING COUNT(*) = 3 ;【例4.44查询goods表,统计每类商品的总销售额,列出总销售额在3000 及以上的类别id和总销售额(列名为sale_total)0实例演示SELECT cid, SUM(gprice * gsale_qty) a

17、s sale_total FROM goods GROUP BY cidHAVING sale_total = 3000 ;使用窗口函数分析数据窗口函数也称为OLAP函数(Online Anallytical Processing,联机分析处理), 能对查询结果集进行实时分析处理,是MySQL 8.0新增内容。函数名。说 明。ROW_NUMBER-为查询结果集,增加行序号。例:1,2 , 3自然数行序RANK-对指定值在分组的排名,设部E位J字号。例:1 , 1 , 3-DENSE_RANK密集名,对指定值在分组的排名,设器验序号。例:1, 1,适用班级:窗口函数主要功能是对结果集进行数据分析

18、处理,原那么上只能写在SELECT子 句中。语法格式窗口函数OVER (PARTITION BY分组歹(J名ORDER BY排序列名)AS别名 OVER关键字用来指定函数执行的窗口范围。 PARTITION BY子句:窗口按指定列进行分组,窗口函数在不同的分组上分 别执行; ORDER BY子句:指定排序列,窗口函数将按照排序后的记录顺序进行编号;学习提示窗口函数与使用GROUP BY分组聚合不同,它不会对结果产生额外的分组行, 统计分析中输出的记录数与输入的记录数相同。【例4.451查询goods表,按商品id顺序分析商品销售累计量,列出商品id、 名称和累计销量(列名为acc_num)。实

19、例演示SELECT gid, gname, gsale_qty,SUM(gsale_qty) OVER (ORDER BY gid) as acc_num FROM goods ;【例4.46查询goods表,按商品id顺序给每行记录加行号(列名为row_no)o实例演示SELECT ROW_NUMBER() OVER (ORDER BY gid) as row_noz cid, gname, gsale_qtyFROM goods ;课堂练习【例4.47】查询goods表,分析每件商品的销售量排名(列名为ranking),列 出类别ID、商品名称和销售量排名。学生演示SELECT cid,

20、gname, gsale_qtyzRANK() OVER (ORDER BY gsale_qty DESC ) as ranking, DENSE_RANK() OVER (ORDER BY gsale_qty DESC ) as desc_rank FROM goods ;课堂练习【例4.48查询goods表,分析每类商品中各商品的销售量排名(列名为 ranking),列出类别ID、商品名称和销售量排名。P.适用班级:P.学生演示SELECT cidz gname, gsale_qty,RANK() OVER (PARTITION BY cid ORDER BY gsale_qty DESC

21、 ) as rankingFROM goods ;任务3查询多表数据任务描述实际应用开发中,业务逻辑所关联的数据通常会涉及两张以上的数据表。连接 是多表数据查询的一种有效手段,本任务阐述连接查询中的交叉连接、内连接 和外连接,以及联合查询等方式,灵活构建多表查询,以满足实际应用需要。教学引入 前面学习了很多重要的数据查询技巧,但都只是对某一张表的检出数据进行相关操作,根据关系数据库数据表设计原那么,数据的提取需来自多个数据表。带着问题开本任务讨论如下知识内容:展本章学习(1)怎样进行多表查询?使用表的别名的必要性?激发学生兴(2)多表查询时应考虑哪些因素?趣(3)综合多表数据的方法?问题情景:

22、在网上商城系统中,如果想获取某个用户所购商品的详细信息,这些数据就需要来自二张不同的数据表采用表的联接来实现连接查询简介连接查询由SELECT语句的FROM子句中的JOIN关键字来实现。精讲SELECT ALL | DISTINCT * | 歹U名 1 ,歹U名 2,,歹U名 nFROM 表 1 别名 1 CROSS | INNER | LEFT | RIGHT JOIN 表 2 别名 2ON表1 .关系列=表2.关系列| US工NG(列名); JOIN:泛指各类连接操作的关键字,具体含义如表适用班级:P.连接类型一连接符号P说 明-交叉连接,CROSS JOIN-两张表的笛卡J闱一内连接IN

23、NER JOIN-INNER可省略,连接同一张表时也称为自连接。左外连接,LEFT JOIN承外连接,右外连接,RIGHT JOIN* ON连接条件表达式:指定连接的条件。交叉连接无该子句。略讲交叉连接交叉连接返回的结果集是被连接的两张表的笛卡儿积。【例4.491查询会员能购买的所有可能的商品。列出用户名和商品名称。SELECT uname, gnameFROM users CROSS JOIN goods;学习提示在一个规范化的数据库中使用交叉连接无太多应用价实际意义,但可以利用它 为数据库生成测试数据,帮助理解连接查询的运算过程。 内连接内联接是MySQL缺省的联接方式,仅当一个表中的一些

24、行在另一个表中也有相应的行时,它忽略所有不符合ON子句指定的联接条件的行。精讲+演示【例4.501查询goods表,列出所有商品id、名称、类别id和类别名称。SELECT gid, gname, category.cid, cname FROM category JOIN goodsON category.cid= goods.cid ;使用表的别名学习提示由于命名规那么的限制以及为了防止重名,有些数据库表名称会非常长并且复杂。为了增加脚本查询的可读性和可维护性,使用表的别名增加语句的可读性,有利于写复杂的联接操作,简化T-SQL脚本维护联接一个表和它自身时,必须使用别名备 课 纸任务1查询

25、单表数据任务场景单表数据查询是最基本的数据查询,其查询的数据源只涉及数据库中的一张表。带着问题开本任务讨论如下内容:展本章学习(1)怎样将用户需求的信息查询出来?激发学生兴(2)怎样筛选用户所需数据?趣(3)怎样对分组数据进行汇总?(4)怎样对汇总后的数据进行筛选?(5)怎样对结果集进行汇总? SELECT 语句查询操作用于从数据表中筛选出符合需求的数据,查询得到的结果集也是关系 模式,按照表的形式组织并显示。回顾关系代数据库查询操作类型:数数据的操连接一-多表联接作类型选择-选择行 投影-一选择列解释每个子 句的作用SELECT ALL | DISTINCT * | 列名 1 AS别名1列名

26、 2,,列名 nJFROM表名WHERE条件表达式、GROUP BY 列名ASC | DESC HAVING 条件表达式 11ORDER BY 列名ASC | DESC,.LIMIT OFFSET /录数;SELECT子句:指定查询结果集返回的列,当使用“*”时,用于显示 表中所有的列;关键字DISTINCT为可选参数,用于消除查询结果集 中的重复记录。FROM子句:指定查询的数据源,可以是表或视图。 WHERE子句:指定查询的筛选条件。GROUP BY子句:指定查询的分组列名;关键字HAVING为可选参数, 用于指定分组后的结果集筛选条件。适用班级:P.P.适用班级:【例4.51查询good

27、s表,列出所有“图书”类商品的id、名称、类别id和类别名称。SELECT gid, gname, g.cid, cnameFROM category c JOIN goods g - category 表的别名为 c, goods 表的 别名指定为gON c.cid= g.cidWHERE cname =,图书,;学习提示两张表在进行连接时,连接列字段的名称可以不同,但要求必须具有相同数据类型、长度和精度,且表达同一范畴的意义,通常连接字段一般是数据表的主键和外键。学习提示使用内连接后,仍可使用SELECT语句对单表数据查询的所有语法。当连接的表超过两张表时,需要分别为每个JOIN连接指定连

28、接条件。精讲+演示【例4.52查询用户名(uname)为“段湘林”的购物车信息,列出购物车中的商品id,商品名称、价格及购买数量。SELECT g.gid, gname, gprice, cnumFROM users s JOIN cart c ON s.uid = c.uidJOIN goods g ON g.gid = c.gidWHERE uname =段湘林,第二种方案在多张表进行连接时,查询的连接可以先使用JOIN将所有表连接起来,再使用ON关键字写出多个连接条件SELECT g.gid, gname, gprice, cnum FROM users s JOIN cart c JO

29、IN goods gON s.uid = c.uid AND g.gid = c.gid WHERE uname =段湘林;第三种方案在JOIN连接中,当连接条件由两张表相同名称且类型相同的字段相连时,可以使用USING(列名)来连接P.适用班级:SELECT g.gid, gname, gprice, cnumFROM users JOIN cart USING(uid)JOIN goods g USING(gid) WHERE uname =段湘林; 自连接自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一个表。精讲+演示【例4.53】查询与用户“段湘林”在同一城市的用户,列出用户

30、名、邮箱和城 市名。SELECT ul.unamer ul.uemail, ul.ucityFROM users ul JOIN users u2ON ul.ucity = u2.ucityWHERE u2 .uname =,段湘林,AND ul .uname !=,段湘林,外连接连接返回的结果集除了包括符合连接条件的记录行外,还会返回FROM子句中 至少一个表中的所有行,不满足条件的数据列显示为NULL。 左外联接(LEFT JOIN)精讲+演示结果表中除了包括满足连接条件的行外,还包括左表的所有行【例454】查询每个用户的订单信息,列出用户id、用户名和订单金额。SELECT u.uid,

31、 uname, oamount FROM users u LEFT JOIN orders oON u.uid = o.uid ; 右外联接(RIGHT JOIN)结果表中除了包括满足连接条件的行外,还包括右表的所有行精讲+演示【例4.551查询每个用户的订单数,列出用户id、用户名和订单数(ordejnum)。SELECT u.uid, uname, count(o.uid) as order_num FROM orders o RIGHT JOIN users uON o.uid = u.uidGROUP BY u.uid ;适用班级:学习提示左外连接和右外连接的操作相同,区别在于表相对于

32、JOIN关键字的位置不同。联合查询问题情景对于数据库中学生管理时,一般每个班都有相应的数据表,如果想汇总一个系,的所有学生情况,应该怎么办?讨论采用表的联合 使用UNION操作符可以从多个查询里产生单个结果集SELECT 语句 1UNIONALLSELECT 语句 2UNION ALL.n精讲+演示【例4.45联合查询uID值为1和2的用户信息,列出uID, uName, uSexoSELECT uID,uName,uSexFROM usersWHERE uid=lUNIONSELECT uID,uName,uSexFROM usersWHERE uid=2;课堂练习【例4.46联合查询tid

33、值为1和2的商品信息,列出tid, gdName, gdPrice,并按gdPrice从高到低排序,显示前三行记录。SELECT tId,gdName,gdPriceFROM goodsWHERE tld=lUNIONSELECT tId,gdName,gdPriceFROM goodsWHERE tld=2 cnny7n xzt tr att Q.P.适用班级:P.学习提示JOIN可以看作是将表进行水平组合,而UNION那么是将表进行垂直组合 UNION和JOIN的区别类比两个关 JOIN是合并多个表并生存一个单独的结果集,该结果集将包含多键字个表中的字段 UNION是把多个SELECT语句

34、返回的结果集合并到一个结果集中使用操作符UNION,要求所引用的表必须具有相似的数据类型、相同的字段数,每个查询中的选择列表必须具有相同的顺序使用操作符JOIN,只要求联接的表共同拥有某些字段用UNION分解复杂的查询会提高查询速度,而联接表越多,查询速度越慢任务3子查询多表数据任务描述子查询是多表数据查询的另一种有效方法,当数据查询的条件依赖于其他查询的结果时,使用子查询可以有效解决此类问题。课程引入 子查询本质上是一个SELECT语句,通常它嵌套在其他的SELECT、INSERT. UPDATE. DELETE等语句中,作为联接的替代选择或者作为单独的表达式表示较复杂的查询条件。带着问题开

35、本任务讨论如下内容:展本章学习(1)为什么要用子查询?激发学生兴(2)子查询的使用场合趣(3)子查询的分类及实现方法?问题情景:设想我们有一个网上书店管理系统。我们使用authors表存储作者的相关信息,使用books表存储书的相关信息。那么,如果我们需要查找北京地区作者的全部图书时,就可以采用子查询。适用班级: P.子查询简介子查询是将一个复杂的查询分解成一系列的简单查询,通常在一个查询需要另一个查询的结果时使用。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询设问:子查询或外部选择。许多包含子查询的SQL语句都可以改为用联接表不。与联接的异而其它一些问题只能由子查询提出。在

36、Transact-SQL中,包括子查询的语句同?和不包括子查询但语义上等效的语句在性能方面通常没有区别。但是,在一些类比法必须检查存在性的情况中,使用联接会产生更好的性能。否那么,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。学生参与讨论, 使用子查询的考前须知子查询要用括号括起来只要需要返回一个值或一系列值,就可以使用子查询 不能使用子查询检索数据类型为text或image的字段 子查询可以再包含子查询,至多可嵌套32层/ 子查询的类型 把子查询用作表达式 把子查询用作派生表使用子查询关联数据子查询用作表达式 在SQL语句中,所有使用表达式的地方,都可以使用子查询代替当子查询被用

37、作表达式时,子查询可以认为是被当作一个表达式处理并计算。 查询优化器总是将表达式等同于联接一个只有一行记录的表 在整个语句中,只计算一次P.适用班级:1.使用比拟运算符的子查询当子查询的结果返回为单个值时,通常可以用比拟运算:符为外层查询提供比拟表达式比拟运算符(子查询)演示+精讲【例4. 59】查询用户名为“郭辉”的订单信息,列出订单编号、订单金额和下 单时间。SELECT ocode, oamountf ordertime FROM ordersWHERE uid = ( SELECT uid FROM users WHERE uname =哪辉,);【例4.60】查询比“乐器”类商品销售

38、总价高的商品类别,列出类别id和总销售 额(sale_total) o实例演示SELECT cid, SUM(gprice*gsale_qty) as sale_total FROM goodsGROUP BY cidHAVING sale_total ( SELECT SUM(gprice*gsale_qty) FROM goods g JOIN category c on c.cid = g.gidWHERE cname =乐器)2.使用IN关键字的子查询当子查询的结果返回为单列集合时,可以使用IN关键字表达式NOT IN (子查询)演示+精讲【例4.61】查询未购买过商品的会员,列出用户

39、id、用户名、性别和出生年月。SELECT uid, uname, ugender, ubirthday FROM usersWHERE uid NOT IN (SELECT uid FROM orders);课堂练习【例4.62】查询消费金额在3000元以上的用户,用户id、用户名、性别和出 生年月。SELECT uid, uname, ugender, ubirthday FROM usersWHERE uid IN (SELECT uid FROM orders GROUP BY uid HAVING SUM(oamount) = 3000);P.适用班级:3.使用ANY或ALL关键字的

40、子查询当子查询的结果返回为单列集合时,还可以使用ANY或ALL关键字表达式比拟运算符ANY| SOME | ALL(子查询、ALL那么表示外层查询的表达式要与子查询的结果集中的所有值匹配 ANY表示外层查询的表达式与子查询结果集中的值有一个匹配演示+精讲【例4.63查询比“电脑及配件”类某一商品价格高的商品信息,包括商品id、 名称和价格。SELECT gid, gname, gpriceFROM goodsWHERE gprice ANY( SELECT gpriceFROM goodsWHERE ( cid = (SELECT cidFROM categoryWHERE cname = 1

41、 电脑及配件 1 );【例4.64查询比“电脑及配件”类商品价格都高的商品信息,包括商品编号、 名称和价格。SELECT gid, gname, gpriceFROM goodsWHERE gprice ALL( SELECT gpriceFROM goodsWHERE ( cid = (SELECT cidFROM categoryWHERE cname = 1 电脑及配件 * );学习提示ANY或ALL运算符必须与比拟运算符一起使用。子查询作为派生表子查询的结果集亦可放置在FROM子句后作为查询的数据源表,这种表称为派生表用子查询产生派生表时,子查询可以认为是:是查询语句中的一个结果集,被用作一个表适用班级:P. 代替了 FROM子句中的表将与查询的其他局部一起优化实例讲解【例4.65】查询年龄在20以下的用户名、性别和年龄(age)oSELECT *FROM ( SELECT uname, ugender, year(now()-year(ubirthday) as age FROM users ) AS tbWHERE age 20 ;学习提示FROM后的子查询得到的是一张虚表,需要用AS子句为虚表定义一个表名。 此外,列的别名不能用作WHERE子句后的条件表达式,当需要使用别名作为 过滤条件时,可以使用子查询作为派生表。课堂练

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁