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

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

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




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 



                                                                             144 


…………………………………………………………Page 145……………………………………………………………

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



                                 NAME 



                               BIKE SPEC 



                               JACKS BIKE 



     我们曾经花过一些时间来讨论为什么子查询应该只返回一个数值                          而这个查询返回 



了多个数值则是显而易见的 



     将上述结果引入下边的语句 



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



     WHERE C。NAME IN (。。。) 



分析 



    头两行没有什么特别的内容  在第三行时再次引入了关键字 IN                     看一下第二天的        查 



询简介    SELECT  语句的使用       IN 是一种允许你在子查询中进行多行输出的工具  就像 



你原来记得的那样  它将返回与所列内容相匹配的记录                    它的列出内容如下 



  LE SHOPPE 



  BIKE SPEC 



  LE SHOPPE 



  BIKE SPEC 



  JACKS BIKE 



根据子查询的条件得到了下边的内容 



               NAME         ADDRESS       STATE  ZIP 



               BIKE SPEC    CPT SHRIVE    LA     45678 



               LE SHOPPE    HOMETOWN      KS     54678 



               JACKS BIKE   24 EGLIN      FL     34567 



    在子查询中使用关键字 IN  是非常普遍的             因为 IN  可以与一组数据进行对比  而且它 



不会使 SQL 的引擎检查出其中有冲突或是不合适的地方 



    子查询也可以使用 GROUP BY 和 HAVING 子句          见下例 



    INPUT/OUTPUT 



    SELECT NAME   AVG  QUANTITY   FROM ORDERS 



    GROUP BY NAME HAVING AVG    QUANTITY   》  SELECT AVG   QUANTITY 



    FROM ORDERS 



         NAME         AVG 



         BIKE SPEC    8 



         JACKS BIKE   14 



                                                                      145 


…………………………………………………………Page 146……………………………………………………………

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



    分析 



    让我们来看一下这个查询在引擎中的工作过程                  首先  请看子查询 



    INPUT/OUTPUT 



    SELECT AVG  QUANTITY    FROM ORDERS 



    该查询返回的结果为 6 



    而主查询的结果如下 



    INPUT/OUTPUT 



    SELECT NAME   AVG   QUANTITY   FROM  ORDERS    GROUP  BY  NAME 



          NAME           AVG 



          AAA BIKE        6 



          BIKE SPEC       8 



          JACKS BIKE      14 



          LE SHOPPE      4 



          TRUE WHEEL      5 



    在经过 HAVING 子句的检查后         该查询给出了两条大于平均 QUANTITY 的记录 



    INPUT/OUTPUT 



    HAVING AVG   QUANTITY   》  SELECT AVG   QUANTITY   FROM ORDERS 



         NAME           AVG 



         BIKE SPEC      8 



         JACKS BIKE     14 



相关子查询 



    到现在为止      我们所写出的子查询都是独立的              它们都没有涉及到其它的子查询              相 



关子查询可以接受外部的引用从而得到一些令人惊奇的结果  请看下边的这个查询 



    INPUT 



    SELECT * FROM ORDERS O WHERE 'ROAD BIKE' = 



                          (SELECT DESCRIPTION FROM PART P 



                          WHERE P。PARTNUM = O。PARTNUM) 



    OUTPUT 



    ORDEREDON      NAME           PARTNUM     QUANTITY    REMARKS 



    19…MAY…1996    TRUE WHEEL     76          3           PAID 



                                                                       146 


…………………………………………………………Page 147……………………………………………………………

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



    ORDEREDON       NAME            PARTNUM      QUANTITY     REMARKS 



    19…MAY…1996     TRUE WHEEL      76           3             PAID 



    17…JAN…1996     BIKE SPEC       76           11           PAID 



    17…JAN…1996     LE SHOPPE       76           5            PAID 



      1…JUL…1996    AAA BIKE        76           4            PAID 



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