- 1、本文档共148页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
06第6章SQL语言解读
6、连接查询---自连接 自己连接自己称为自连接,一般在表的各行数据之间存在关系时才使用自连接,这需要对表给出一个别名。 【例6-61】某信息系统在数据库中存储了系统的菜单,如图6-58所示。 图中“LevelOne”为“Y”表示一级菜单,ParentID列存储菜单的父菜单编号,如果其父菜单为一级菜单,则其为二级菜单。请查询系统中的菜单,显示的格式为:一级菜单名称、二级菜单名称、URL。 6、连接查询---自连接 SELECT a.MenuName AS 一级菜单名称, b.MenuName AS 二级菜单名称, b.URL FROM menu a INNER JOIN menu b ON a.MenuID=b.ParentID a b a.MenuID=b.ParentID 6、连接查询 (3)使用连接查询更新数据表 当用一个表的数据去更新另一个表的相关数据时,可以使用连接查询去更新,即在UPDATE语句中使用FROM子句。 【例6-62】在如图6-60所示的订单细节和产品表中,订单细节表的Total=number×mPrice。 OrderDetail Product UPDATE OrderDetail SET Total = number*mPrice FROM OrderDetail INNER JOIN Product on Product.cProductID=OrderDetail.cProductID 上节课内容回顾 内连接 外连接 7、子查询(嵌套查询) 在一个SELECT 语句的WHERE 子句或HAVING 子句中嵌套另一个SELECT 语句的查询称为嵌套查询,又称子查询。子查询是SQL 语句的扩展,其语句形式如下。 语法: SELECT 目标表达式1[,...] FROM 表或视图名1 WHERE [表达式] (SELECT 目标表达式2[,...] FROM 表或视图名2) (1)使用比较运算符连接子查询 子查询可由一个比较运算符(=、 、、 =、、!, ! 或 =)引入;由未修改的比较运算符(后面不跟 ANY 或 ALL 的比较运算符)引入的子查询必须返回单个值而不是值列表。如果这样的子查询返回多个值,系统将显示错误信息。 7、子查询(嵌套查询) 7、子查询(嵌套查询) 【例6-63】显示价钱最贵的玩具的名称。 SELECT vToyName FROM Toys WHERE mToyRate = (SELECT MAX(mToyRate) From Toys) 或者 SELECT vToyName FROM Toys WHERE mToyRate =ALL(SELECT mToyRate From Toys) WHERE条件是mToyRate大于等于子查询的所有值。 7、子查询(嵌套查询) 【例6-64】查询价格高于商标编号为“001”的任一个玩具的玩具信息。 SELECT cBrandId FROM Toys WHERE mToyRate (SELECT MAX(mToyRate) FROM Toys WHERE cBrandId=001) 或者 SELECT cBrandId FROM Toys WHERE mToyRateSOME(SELECT mToyRate FROM Toys WHERE cBrandId=001) 语句中SOME表示子查询的任意一个值,WHERE条件是mToyRate大于子查询的任意一个值。SOME可以用ANY替代。 7、子查询(嵌套查询) 【例6-65】找出每个购物者超过他所有订单的平均金额的订单,显示:购物者编号、订单编号、订单时间,订单金额。 SELECT * FROM Orders T WHERE mTotalCost(SELECT AVG(mTotalCost) FROM Orders WHERE cShopperId = T.cShopperId) 由于内层查询与外层查询使用了同一个表Orders,因此外层查询的Orders表给了一个别名T。这条SQL的执行过程是:从外层查询中取出Orders表的一个记录x,将记录x的cShopperId列的值传给内层查询,内层查询计算这个购物者所有订单的平均金额b,外层查询再判断“mTotalCost =b”是否成立,如果成立,则输出此记录。然后外层查询继续取出下一个记录做上述处理。 7、子查询(嵌套查询) 通过 IN(或 NOT IN)引入的子查询结果是一列零值或更多值。子查询返回结果之后,外部查询将利用这些结果。 (2)使用谓词IN连接子查询 【例6-66】查询商标名称为“乐高”的玩具。 SELE
文档评论(0)