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

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

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






  1…JUN…1996      AAA BIKE       10          10          TANDEM 



  30…MAY…1996     BIKE SPEC      10          10          TANDEM 



  2…SEP…1996      TRUE WHEEL     10          10          TANDEM 



  1…JUN…1996      LE SHOPPE      10          10          TANDEM 



  30…MAY…1996     BIKE SPEC      23          23          MOUNTAIN BIKE 



  15…MAY…1996     TRUE WHEEL     23          23          MOUNTAIN BIKE 



  30…JUN…1996     TRUE WHEEL     42          42          SEATS 



  1…JUL…1996      AAA BIKE       46          46          TIRES 



  30…JUN…1996     BIKE SPEC      54          54          PEDALS 



  1…JUL…1996      AAA BIKE       76          76          ROAD BIKE 



  17…JAN…1996     BIKE SPEC      76          76          ROAD BIKE 



  19…MAY…1996     TRUE WHEEL     76          76          ROAD BIKE 



  11…JUL…1996     JACKS BIKE     76          76          ROAD BIKE 



  17…JAN…1996     LE SHOPPE      76          76          ROAD BIKE 



分析 



    利用在两个表中都存在的 PARTNUM            列  我们得到了存储在 ORDERS          表中的的信息 



以及在 PARTS    中的与 ORDERS     相关的信息      它表明了你已经定出的零件数量              这种联合 



操作称为等值联合         因为它只显示第一个表中的数据以及第二个表中的  存在于第一个表 



中的数值 



    你也可以使用 WHERE 子句对其结果进行更大的限制  例如 



    INPUT/OUTPUT 



    SELECT  O。ORDEREDON    O。NAME   O。PARTNUM    P。PARTNUM   P。DESCRIPTION 



                                                                         126 


…………………………………………………………Page 127……………………………………………………………

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



    FROM   ORDERS    O  PARTP  WHERE    O。PARTNUM    P。PARTNUM 



    AND   O。PARTNUM=76 



ORDEREDON       NAME           PARTNUM         PARTNUMDES     DESCRIPTION 



1…JUL…1996      AAABIKE        76              76             ROADBIKE 



17…JAN…1996     BIKESPEC       76              76             ROADBIKE 



19…MAY…1996     TRUEWHEEL      76              76             ROADBIKE 



11…JUL…1996     JACKSBIKE      76              76             ROADBIKE 



17…JAN…1996     LESHOPPE       76              76             ROADBIKE 



    PARTNUM 为 76  的零件描述不是非常准确  你不想把它作为零件出售                      我们非常愦憾 



在发现在许多数据库系统中需要最终用户知道一些非常晦涩的代码                             而该代码所代表的东 



西原本就有着自己的           非常清楚明白的名字          请不要像他们那样做            这一行代码也可以 



写成如下方式 



    INPUT/OUTPUT 



    SELECT  O。ORDEREDON    O。NAME    O。PARTNUM    P。PARTNUM   P。DESCRIPTION 



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



    AND   P。DESCRIPTION     ROAD   BIKE 



ORDEREDON       NAME           PARTNUM         PARTNUMDES     DESCRIPTION 



1…JUL…1996      AAABIKE        76              76             ROADBIKE 



17…JAN…1996     BIKESPEC       76              76             ROADBIKE 



19…MAY…1996     TRUEWHEEL      76              76             ROADBIKE 



11…JUL…1996     JACKSBIKE      76              76             ROADBIKE 



17…JAN…1996     LESHOPPE       76              76             ROADBIKE 



    顺着这个思路        我们来看一下一个或多个表是如何进行联合的                        在下边的例子中 



employee_id 显然是唯一标识列        因为你可以有在同一个公司  有相同薪水并且他们的名字 



也相同的雇员  但是他们会各自拥有他们自己的 employee_id                   所以如果要对这两个表进行 



联合    我们应该使用 employee_id 列 



EMPLOYEE_TABLE                         EMPLOYEE_PAY_TABLE 



EMPLOYEE_ID                            EMPLOYEE_ID 



LAST _NAME                             SALARY 



FIRST _NAME                            DEPARTMENT 



MIDDLE_NAME                            SUPERVISOR 



                                       MARITAL_STATUS 



INPUT 



                                                                         127 


…………………………………………………………Page 128……………………………………………………………

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



SELECT E。EMPLOYEE_ID   E。LAST_NAME    EP。SALARY FROM EMPLOYEE_TBL E 



EMPLOYEE_PAY_TBL  EP    WHERE      E。EMPLOYEE_ID  =  EP。EMPLOYEE_ID 



AND E。LAST_NAME = 'SMITH'; 



OUTPUT 



E。EMPLOYEE_ID            E。LAST_NAME              EP。SALARY 



13245                    SMITH                    35000。00 



技巧    如果你在联合表的时候没有使用 WHERE             子句    你执行的其实是笛卡尔联合            也就 



     是笛卡尔叉积  这种联合会对 FROM  中指出的表进行完全的组合  如果每个表有 200 



     个记录的话      那么所得到的结果将会有 40000         行  200   200  这太大了  所以除非 



     你确实是想对表中的所有记录进行联合                否则一定不要忘记使用 WHERE 子句 



    现在回要原来的表中         我们已经对联合进行了充分的准备               可以用它来完成一些实际 



的工作了  找一下我们卖 road bikes 共卖了多少钱 



INPUT/OUTPUT 



SELECT SUM   O。QUANTITY * P。PRICE TOTAL  FROM ORDERS O; PART P 



WHERE O。PARTNUM = P。PARTNUM  AND P。DESCRIPTION = 'ROAD BIKE' 



      TOTAL 



      19610。00 



    在这种设置中       销售人员可以保证 ORDERS  表的更新           生产部门则可以保持 PART  表 



的更新  而你则无需对数据库的底层进行重新设计 



注  注意在 SQL 语句中表以及列的别名的使用  你可能会因为别名多按了许多许多个按键 



但是它可以让你的语句更具有可读性 



我们可以对更多的表进行联合吗  例如               我们需要生成发票所要的信息             可以这样写 



INPUT/OUTPUT 



SELECT C。NAME   C。ADDRESS    O。QUANTITY * P。PRICE TOTAL 



FROM ORDER O    PART P CUSTOMER C 



WHERE O。PARTNUM = P。PARTNUM AND O。NAME = C。NAME 



             NAME               ADDRESS           TOTAL 



             TRUE WHEEL         55O HUSKER         1200。00 



             BIKE SPEC          CPT SHRIVE        2400。00 



                                                                       128 


…………………………………………………………Page 129……………………………………………………………

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



               LE SHOPPE            HOMETOWN             3600。00 



               AAA BIKE             10 OLDTOWN           1200。00 



               TRUE WHEEL           55O HUSKER           2102。70 



               BIKE SPEC            CPT SHRIVE           2803。60 



               TRUE WHEEL           55O HUSKER           196。00 



               AAA BIKE             10 OLDTOWN          213。50 



               BIKE SPEC            CPT SHRIVE          542。50 



               TRUE WHEEL           55O HUSKER           1590。00 



               BIKE SPEC            CPT SHRIVE           5830。00 



               JACKS BIKE           24 EGLIN             7420。00 



               LE SHOPPE            HOMETOWN             2650。00 



               AAA BIKE             10 OLDTOWN           2120。00 



把语句写成如下格式会更具有可读性 



    INPUT/OUTPUT 



    SELECT C。NAME     C。ADDRESS     O。QUANTITY * P。PRICE TOTAL 



    FROM ORDERS O      PART P  CUSTOMER C 



    WHERE O。PARTNUM = P。PARTNUM 



                    AND  O。NAME  =  C。NAME      ORDER  BY  C。NAME 



                 NAME               ADDRESS             TOTAL 



                  AAA BIKE           10 OLDTOWN         213。50 



                  AAA BIKE           10 OLDTOWN        2120。00 



                  AAA BIKE           10 OLDTOWN        1200。00 



                  BIKE SPEC         CPT SHRIVE          542。50 



                  BIKE SPEC         CPT SHRIVE         2803。60 



                  BIKE SPEC         CPT SHRIVE         5830。00 



                  BIKE SPEC         CPT SHRIVE         2400。00 



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