友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第18部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





组 



    OUTPUT 



                  TEAM         AVG         AVG 



                  MARKETING    28          15 



                  RESEARCH     27          15 



    你也可以在 HAVING 中使用在 SELECT  中没有指出的字段进行汇总  如 



   INPUT/OUTPUT 



    SELECT TEAM  AVG  SICKLEAVE   AVG  ANNUALLEAVE    FROM ORGCHART 



    GROUP  BY  TEAM   HAVING  COUNT   TEAM    1 



                 TEAM           AVG         AVG 



                 COLLECTIONS    26          21 



                 MARKETING      28          15 



                 RESEARCH       27          15 



EMAIL wyhsillypig@163。                                          113 


…………………………………………………………Page 114……………………………………………………………

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



    该查询返回了组中成员大于 1 的组 虽然的 SELECT 子句中没有出现 COUNT                    TEAM 



语句  但是它还是在 HAVING 子句中起到了它应有的作用 



在 HAVING 子句中也可以使用其它的逻辑操作符  例如 



    INPUT/OUTPUT 



    SELECT  TEAM   MIN  SALARY    MAX   SALARY   FROM   ORGCHART 



    GROUP   BY  TEAM   HAVING   AVG  SALARY     37000 



    OR 



    MIN  SALARY     32000 



                 TEAM            MIN         MAX 



                 COLLECTIONS     35000。00    40000。00 



                 PR              37500。00     37500。00 



                 RESEARCH        34000。00    45000。00 



    操作符 IN 也可以在 HAVING 子句中使用          如下例 



    INPUT/OUTPUT 



    SELECT  TEAM   AVG   SALARY  FROM   ORGCHART    GROUP   BY  TEAM 



    HAVING  TEAM   IN  'PR';'RESEARCH' 



                         TEAM          AVG 



                         PR            37500。00 



                         RESEARCH      39500。00 



子句的综合应用 



    这一部分没有什么新的东西            只是通过一些例子来向你演示如何将这些子句进行综合 



的应用 



例 



    找出所有 CHECKS 表中对 CASH 和对 GAS 支付的记录            并按 REMARKS 进行排序 



    INPUT 



    SELECT  PAYEE  REMARKS    FROM   CHECKS   WHERE   PAYEE='Cash' 



    OR  REMARKS    LIKE'Ga%' ORDER   BY  REMARKS 



    OUTPUT 



          PAYEE                      REMARKS 



EMAIL  wyhsillypig@163。                                            114 


…………………………………………………………Page 115……………………………………………………………

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



           Joans Gas                    Gas 



           Joans Gas                    Gas 



           Local Utilities              Gas 



           Cash                         Trip to Boston 



           Cash                         Trip to Dayton 



           Cash                         Wild Night Out 



分析 



这里使用了 LIKE 来查找在 REMARKS  中以 GA 开头的内容  通过使用 OR 来控制 WHERE 



返回满足两个条件之一的内容 



如果您有相同的要求           并要求按 PAYEE 进行分组         看下例 



    INPUT 



    SELECT   PAYEE   REMARKS    FROM    CHECKS    WHERE    PAYEE   'Cash' 



    OR   REMARKS    LIKE'Ga%'  GROUP    BY  PAYEE   ORDER    BY   REMARKS 



分析 



    这个查询将会由于无法对 REMARKS  进行分组而无法工作                      切记    无论在什么情况下 



进行分组      SELECT 语句中出现的字段只能是在 GROUP  BY 中出现过的才可以— — 除非你 



在 SELECT 子句中不指定任何字段 



例 2 



使用 ORGCHART  表      找出病候天数少于 25 天的人的工资              并按名字进行排序 



INPUT 



SELECT   NAME    SALARY   FROM   ORGCHART   WHERE   SICKLEAVE50 



PAYEE                          TOTAL                          NUMBER_WRITTEN 



Cash                           119                             3 



Joes Stale  Dent              150                             1 



Local Utilities                219。5                           3 



Ma Bell                        350。33002                      2 



Reading R。R                    。245。34                         1 



如果把它们结合起来使用会有出人意料的结果  例如 



    INPUT 



    SELECT PAYEE     SUM   AMOUNT     TOTAL    COUNT    PAYEE   NUMBER_WRITTEN 



    FROM    CHECKS     WHERE     AMOUNT》=100      GROUP    BY   PAYEE 



    HAVING    SUM    AMOUNT      》50 



    OUTPUT 



              PAYEE                TOTAL        NUMBER_WRITTEN 



              Joes Stale  Dent    150          1 



              Ma Bell              350。33002    2 



              Reading R。R          。245。34      1 



    将其与下边的结果进行对比 



    INPUT/OUTPUT 



    SELECT    PAYEE    AMOUNT     FROM    CHECKS     ORDER    BY   PAYEE 



                  PAYEE                      AMOUNT 



                  Abes Cleaners              10。5 



                  Abes Cleaners              24。35 



                  Cash                       25 



EMAIL   wyhsillypig@163。                                                      118 


…………………………………………………………Page 119……………………………………………………………

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



                Cash                   34 



                Cash                   60 



                Joans Gas              15。75 



                Joans Gas              25。1 



                Joes Stale  Dent      150 



                Local Utilities        34 



                Local Utilities        87。5 



                Local Utilities        98 



                Ma Bell                150 



                Ma Bell                200。33 



                Reading R。R            。245。34 



分析 



你使用了 WHERE 子句在分组前将 AMOUNT  小于 50  的记录过滤掉了  我们并不试图告诉 



你不要结合使用这两种分组            你在以后可能会有这方面的需要              但是请不要随便地结合使 



用这两种子句  在上例的表中只有为数不多的几行                   否则这本书的内容需要用车来拉了 



而在你的实际工作中数据库可能有成千上万行  结合使用后造成的变化就不会像现在这样 



明显了 



总结 



    在今天我们学习了与扩展 SELECT          语句功能相关的所有子句  切记要认真仔细地去对 



计算机描述你的需求         我们的基本 SQL 教育到这里就结束了  你已经有足够的能力对单个 



表进行操作了       明天  第 6 天    归并表格      我们将有机会在多个表中工作 



问与答 



    问 像这些功能在这一周的早些时候我们已经学习过了  为什么今天还要再学习一次 



    答  我们的确在第 3  天就曾经提到过 WHERE 子句              我们在那时使用 WHERE  是为了 



       更加可靠地进行操作          WHERE  在今天出现是因为它是一个子句              而我们在今天 



       讨论的主题是子句 



校练场 



    1  哪种子句的作用与 LIKE       %   相似 



EMAIL  wyhsillypig@163。                                            119 


…………………………………………………………Page 120……………………………………………………………

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



   2   GROUP BY 子句的功能是什么       哪种子句的功能与它类似 



   3   下面的查询会工作吗 



   INPUT 



        SQL》SELECT NAME   AVG  SALARY   DEPARTMENT   FROM   PAY_TBL 



       WHERE DEPARTMENT='ACCOUNTING'   ORDER   BY  NAME 



       GROUP   BY DEPARTMENT    SALARY 



   4   为什么在使用 HAVING 子句时我们总是同时使用 GROUP BY 子句 



   5   你可以使用在 SELECT 语句中没有出现的列进行排序吗 



练习 



   1   使用上例中的 ORGCHART  表找一下每一个 TEAM  中 SICKLEAVE 天数超过 30  天 



      的人数 



   2   使用 CHECKS 表  返回如下结果 



         OUTPUT 



      CHECK#         PAYEE      AMOUNT 



      1              MA BELL    150 



EMAIL wyhsillypig@163。                                         120 


…………………………………………………………Page 121……………………………………………………………

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



第六天      表的联合 



   今天我们将学习联合操作     这种操作可以让你从多个表中选择数据并对它们进行维护 



在今天结束以后我们将会具有以下能力 



   l  执行外部联合 



   l  执行内部联合 



   l  执行左联合 



   l  执行右联合 



   l  进行等值联合 



   l  进行不等值联合 



介绍 



   能够从多个表中选择和操作数据是 SQL  的特色之一  如果没有这个功能的话你将不得 



不将一个应用程序所需的所有数据放在一个表中          如果表不能共享那么你将不得不在多个 



表中保存相同的数据     而且每当用户需要查询一个新的内容时你就不得不重新设计            和编 



译你的数据库系统     SQL 中的 JION  语句可以让你的设计出比那种庞大的表格更小和更为 



专业以及更容易使用的表格 



在一个 SELECT 语句中使用多个表 



   就像多萝茜在    绿野仙踪   中所做的一样  你其实在    第二天  查询— — SELECT 语 



句的使用   中学习过 SELECT 和 FROM  以后就已经具备了联合多个表格的能力了  但是与 



多萝茜不同   你执行联合操作并不需要将脚后跟磕三下         使用下边的两个表     简单点   不 



妨就叫 TABEL1 和 TABLE2 



注  在今天的查询使用的是 BORLAND   的 ISQL  产生的结果 你会发现它与我们在本书的 



早些时候所使用的查询有一些不同之处  例如        它没有 SQL 提示符  而且在语句的末尾也 



没有分号  在 ISQL  中分号是可选项   但是查询的基本结构是相同的 



EMAIL wyhsillypig@163。                           121 


…………………………………………………………Page 122……………………………………………………………

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



    INPUT                
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!