友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第40章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






            PARTNUM     DESCRIPTION             PRICE 



                                                                     140 


…………………………………………………………Page 141……………………………………………………………

SQL 21  日自学通(V1。0)                                                  翻译人   笨猪 



             PARTNUM      DESCRIPTION                PRICE 



              54          PEDALS                     54。25 



             42           SEATS                      24。50 



             46           TIRES                      15。25 



             23           MOUNTAIN BIKE              350。45 



             76           ROAD BIKE                  530。00 



              10          TANDEM                     1200。00 



             77           ROADKILL                   7。99 



如果你没有觉察到这些改变而仍然使用原来的查询的话  你将会得到如下信息 



    multiple rows in singleton select 



你没有得到任何结果  SQL 的响应信息可能不会相同  但是你都会同样地得不到任何结果 



想知道为什么会有这样的结果  请想一个 SQL 引擎的处理规则  你需要重新核查一下你的 



子查询  请输入 



    INPUT/OUTPUT 



    SELECT PARTNUM FROM PART WHERE DESCRIPTION LIKE 〃ROAD%〃 



   PARTNUM 



   76 



   77 



    你会把这个结果赋给 O。PARTNUM =            就是这一步导致的错误 



分析 



    PARTNUM  怎么能同时匹配 76 和 77  呢  解释器一定会给你这样的信息的                       因为你是 



一个懒家伙       当你使用 LIKE     子句的时候       你就已经开始了犯错误的道路               如果你想使用 



比较运算符如》         (SELECT AVG(O。QUANTITY * P。PRICE) 



   FROM ORDERS O   PART P  WHERE O。PARTNUM = P。PARTNUM) 



                                                                   142 


…………………………………………………………Page 143……………………………………………………………

SQL 21  日自学通(V1。0)                                          翻译人   笨猪 



                    NAME      ORDEREDON      TOTAL 



                 LE SHOPPE    1…JUN…1996   3600。00 



                 BIKE SPEC    30…MAY…1996  2803。60 



                 LE SHOPPE    17…JAN…1996  2650。00 



                 BIKE SPEC    17…JAN…1996  5830。00 



                 JACKS BIKE   11…JUL…1996  7420。00 



分析 



   在这个例子中的 SELECT/FROM/WHERE 子句的区别不太明显 



    SELECT O。NAME  O。ORDEREDON   O。QUANTITY * P。PRICE TOTAL 



   FROM ORDERS O   PART P  WHERE O。PARTNUM = P。PARTNUM 



    这是归并两个表的常用方法          这种归并是必须的        因为单价在 PART    表上而数量则在 



ORDERS 表上 WHERE 子句用来检测相关性错误 指一个主关键字对应两条记录的情况 



之后则是子查询语句 



   AND 



   O。QUANTITY * P。PRICE》(SELECT AVG(O。QUANTITY * P。PRICE) 



   FROM ORDERS O   PART P  WHERE O。PARTNUM = P。PARTNUM) 



    第一个比较表达式是将每一条记录的金额与子查询中的平均金额进行比较                          注意子查 



询中使用归并的原因与主查询是相同的               它严格地遵循着归并的语法          在子查询中没有什 



么秘密可言  它与单独的查询具有相同的语法格式                 事实上     大多数子查询都是作为独立 



查询经过测试确定其只返回一个值以后才作为子查询使用的 



子查询的嵌套 



    嵌套就是将一个子查询嵌入到另一个子查询中去  例如 



    Select * FROM SOMETHING WHERE ( SUBQUERY(SUBQUERY(SUBQUERY))) 



    子查询可被嵌套的深度依你的需要而定              例如   如果你想给那些花费超过了平均价格 



的客户发一个特别通知  你将会使用 CUSTOMERS 表中的如下信息 



INPUT 



    SELECT * FROM CUSTOMER 



OUTPUT 



                                                                   143 


…………………………………………………………Page 144……………………………………………………………

SQL 21  日自学通(V1。0)                                                   翻译人    笨猪 



      NAME           ADDRESS        STATE      ZIP      PHONE     REMARKS 



  TRUE WHEEL       55O HUSKER        NE      58702     555…4545  NONE 



  BIKE SPEC        CPT SHRIVE        LA      45678     555…1234  NONE 



  LE SHOPPE        HOMETOWN          KS      54678     555…1278  NONE 



  AAA BIKE         10 OLDTOWN        NE      56784     555…3421  JOHN…MGR 



  JACKS BIKE       24 EGLIN          FL      34567     555…2314  NONE 



你只需要对上边你的查找定单的查询做一点改动即可 



INPUT/OUTPUT 



SELECT ALL C。NAME     C。ADDRESS    C。STATE   C。ZIP FROM CUSTOMER C 



WHERE C。NAME IN 



    (SELECT O。NAME FROM ORDERS O       PART P 



     WHERE O。PARTNUM = P。PARTNUM 



    AND 



    O。QUANTITY * P。PRICE》 (SELECT AVG(O。QUANTITY * P。PRICE) 



                                                    FROM  ORDERS  O PART P 



                                                    WHERE  O。PARTNUM  =  P。PARTNUM)) 



                 NAME           ADDRESS         STATE   ZIP 



                 BIKE SPEC      CPTSHRIVE      LA       45678 



                 LE SHOPPE      HOMETOWN       KS       54678 



                 JACKS BIKE     24EGLIN        FL       34567 



分析 



    注意一下圆括号最里边的内容               你会发现类似的语句 



    SELECT AVG(O。QUANTITY * P。PRICE) 



    FROM ORDERS O     PART P  WHERE O。PARTNUM = P。PARTNUM 



    结果传入的语句与你以前使用的 SELECT 语句有一些不同之处 



    SELECT O。NAME FROM ORDERS O       PART P WHERE O。PARTNUM = P。PARTNUM 



    AND O。QUANTITY * P。PRICE》(。。。) 



    注意 SELECT 子句已经被改为返回单一的 NAME 列  运行该查询你会得到下表 



                                     NAME 



                                   LE SHOPPE 



                                   BIKE SPEC 



                                   LE SHOPPE 



                                                                          
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!