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

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

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




           'GROUP BY expr '; expr' 。。。 'HAVING condition' ' 



           '{UNION | UNION ALL | INTERSECT | MINUS} SELECT mand ' 



                 'ORDER  BY  {expr|position}  'ASC  |  DESC' 



                 ' {expr|position} 'ASC | DESC'' 。。。' 



     注    根据我对 SQL  的经验  ANSI 标准确实只是 ANSI  的  建议                           上述的语法格式在 



大多数的 SQL 引擎下都能够工作  但是你可以发现它们之间存在着一些差别 



EMAIL    wyhsillypig@163。                                                                97 


…………………………………………………………Page 98……………………………………………………………

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



    你无需对这些复杂的语法花费太多的精力                 因为许多人发现语法表比关于新应用的示 



例更容易让人困惑         本书采用简单的例子展现其特点              不过   如果我们在今天看一下有关 



它的语法表述会使我们对今天的学习更容易理解 



    不要对语法的精确内容太担心             对于不同的解释器它们是不同的  所以               我们应该把 



精力放到关系上  在最前边的是 SELECT 语句  我们在前几天已经多次使用过了  SELECT 



之后应该是 FROM       在每次输入 SELECT      语句时它也应该输入          明天我们将学习 FROM 



语句的新用法       之后是 WHERE     GROUP  BY   HAVING 和 ORDER  BY   其余的子句  包 



括 UNION   UNION  ALL  INTERSECT 和 MINUS 在表中已经在第 3  天时讲过了  每一个 



子句的在数据的选择和操作时都扮演着它的重要角色 



    注  在今天的例子中我们使用两种 SQL  解释器               一种仍然是 SQL     的命令行形式  它 



属于 Personal  Oracle7 而另外一种则不是  它是 BORLAND  公司的 ISQL             你可以发现 



输出的结果会随着解释器的不同而不同 



WHERE  子句 



    仅使用 SELECT 和 FROM 子句       你会受到表中的每一行数据均返回的限制  例如                  只 



在 CHECKS 表中使用这两个关键字           你将会得到表中的全部行  共 7 行 



    INPUT 



    SQL》SELECT   * FROM    CHECKS 



    OUTPUT 



        CHECK#     PAYEE            AMOUNT      REMARKS 



         1         Ma  Bell         150         Have sons next time 



        2          Reading R。R。     245。34      Train to Chicago 



        3          Ma  Bell         200。32      Cellular Phone 



        4          Local Utilities  98          Gas 



        5          Joes Stale Dent 150         Groceries 



         16        Cash  25         Wild        Night Out 



         17        Joans Gas        25。1        Gas 



    使用 WHERE    子句将会使你更具有选择性           要想找到你所填写的支票中所有超过 100 



元的  你可以这样写 



    INPUT 



EMAIL  wyhsillypig@163。                                             98 


…………………………………………………………Page 99……………………………………………………………

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



    SQL》SELECT   *  FROM   CHECKS    WHERE   AMOUNT     100 



    WHERE 子句只返回了符合条件的四条记录 



    OUTPUT 



         CHECK#     PAYEE            AMOUNT      REMARKS 



         1          Ma Bell          150         Have sons next time 



         2          Reading R。R      245。34      Train to Chicago 



         3          Ma Bell          200。32      Cellular Phone 



         5          Joes Stale  Dent 150        Groceries 



    使用 WHERE    也可以解决一些其它的难题             下表给出了姓名和位置  你可以提出这样 



的问题— — Waldo 住在哪儿 



    INPUT 



    SQL》SELECT   *  FROM   PUZZLE 



                       OUTPUT 



                      NAME          LOCATION 



                       TYLER        BACKYARD 



                       MAJOR        KITCHEN 



                       SPEEDY       LIVING ROOM 



                       WALDO        GARAGE 



                       LADDIE      UTILITY CLOSET 



                       ARNOLD       TV ROOM 



    INPUT 



    SQL》SELECT   LOCATION    AS  〃WHERE'S WALDO?〃   FROM    PUZZLE 



         WHERE    NAME = 'WALDO' 



    OUTPUT 



    WHERE'S WALDO? 



    GARAGE 



    好了 我答应以后不再写像这样粗俗的语句了 我已经把它们收录于 SQL BATHROOM 



HUMOR    — — 这是一本每个人都想得到的书              不过  这个查询显示出了在 WHERE  中用 



于条件的列并没有在 SELECT          语句中出现      本例中你所选择的是 LOCATION          列而条件列 



是 NAME    这是完全合法的        同时  我们也应该注意到 SELECT  语句中我们使用了 AS 



它是一个可以选择的参数            用以指定 LOCATION     的别名  你以后将不会看到 AS            因为它 



是多余的  ACCESS  中则不可省略— — 译者             在大多数 SQL 解释器中我们只需输入 



EMAIL  wyhsillypig@163。                                               99 


…………………………………………………………Page 100……………………………………………………………

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



    INPUT 



    SQL》SELECT     LOCATION     〃WHERE'S    WALDO?〃    FROM   PUZZLE    WHERE 



NAME='WALDO' 



    这里没有使用 AS        但它的结果与上例是完全一样的 



    WHERE 是使用频度仅次于 SELECT 和 FROM  的语句 



STARTING WITH 子句 



    STARTING  WITH 子句附加于 WHERE  子句上  它的作用与 LIKE                  exp%  相似    试 



比较下边的两个查询 



    INPUT 



    SELECT    PAYEE   AMOUNT      REMARKS     FROM    CHECKS   WHERE     PAYEE 



LIKE('Ca%') 



    OUTPUT 



                   PAYEE      AMOUNT       REMARKS 



                   Cash       25           Wild Night Out 



                   Cash       60           Trip to Boston 



                   Cash       34           Trip to Dayton 



再看看下边的查询 



INPUT 



SELECT   PAYEE   AMOUNT     REMARKS     FROM   CHECKS    WHERE    PAYEE   STARTING 



WITH('Ca') 



OUTPUT 



                     PAYEE     AMOUNT       REMARKS 



                     Cash      25           Wild Night Out 



                     Cash      60           Trip to Boston 



                     Cash      34           Trip to Dayton 



    结果是相同的  你甚至可以同时使用它们  例如 



    INPUT 



    SELECT   PAYEE   AMOUNT     REMARKS     FROM    CHECKS 



    WHERE    PAYEE   STARTING    WITH('Ca') OR   REMARKS     LIKE  'G%' 



    OUTPUT 



EMAIL  wyhsillypig@163。                                                   100 


…………………………………………………………Page 101……………………………………………………………

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



                  PAYEE               AMOUNT        REMARKS 



                  Local Utilities     98            Gas 



                  Joes Stale  Dent   150           Groceries 



                  Cash                25            Wild Night Out 



                  Joans Gas           25。1          Gas 



                  Cash                60            Trip to Boston 



                  Cash                34            Trip to Dayton 



                  Joans Gas           15。75         Gas 



    警告     STARTIN      WITH  为许多 SQL  解释器所支持             在你喜欢上它之前请先检查你 



的 SQL 解释器是否支持它 



ORDER BY 子句 



    在有些时候你可能会希望查询输出的结果按一定的排序规则来显示                                      可是     正如你所 



知道的      SELECT FROM 语句只会给你一个列表                  除非你已经定义了关键字  见第 10 天 



  创建视图和索引             否则你查询的结果是依据它们在输入时的次序排列的  请看下表 



    INPUT 



    SQL》SELECT      *  FROM     CHECKS 



    OUTPUT 



            CHECK#           PAYEE          AMOUNT           REMARKS 



                 1          Ma Bell            150       Have sons next time 



                 2        Reading R。R。       245。34        Train to Chicago 



                 3          Ma Bell          200。32         Cellular Phone 



                 4        Local Utilities      98                Gas 



                 5      Joes Stale  Dent      150            Groceries 



                 16           Cash             25          Wild Night Out 



                 17        Joans Gas          25。1               Gas 



                 9        Abes Cleaners       24。35         X…Tra Starch 



                 20       Abes Cleaners        10。5         All Dry Clean 



                 8            Cash             60           Trip to Boston 



                 21           Cash             34           Trip to Dayton 



分析 



    请相信我  数据输出的情况的确是按照它们被输入的先后次序排序的  在第 8 天的  数 



据操作      中我们将知道如何使用 INSERT               来创建一个新的表            那时你就可以试一下            看看 



EMAIL   wyhsillypig@163。                                                         101 


…………………………………………………………Page 102……………………………………………………………

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



数据是不是如你所猜想的那样来排序 



    ORDER  BY 子句为你提供了对输出的结果进行排序的方法  例如  将记录按 CHECKS 



号进行排序  语句如下 



    INPUT 



    SQL》SELECT      *  FROM    CHECKS     ORDER     BY   CHECK# 



    OUTPUT 



          CHECK#      PAYEE             AMOUNT        REMARKS 



          1           MaBell             150          Have next sonstime 



          2           Reading  R。R。     245。34        Train  to  Chicago 



          3           Ma   Bell         200。32        Cellular Phone 



          4           Local  Utilities  98            Gas 



          5           Joes  Stale                    Dent   150  Groceries 



          8           Cash              60            Trip to Boston 



          9           Abes   Claeners   24。35         X…Tra   Starch 



          16          Cash              25            Wild Night  Out 



          17          Joans  Gas        25。1          Gas 



          20          Abes   Cleaners    10。5         All  Dry  Clean 



          21          Cash              34            Trip to Dayton 



    现在数据已经按照你的要求进行排序而不是按照它们被输入的次序进行排序了                                           下边 



的例子则表明  BY 是 ORDER 不可缺少的组成部分 



    INPUT/OUTPUT 



    SQL》 SELECT     *   FROM    CHECKS    ORDER     CHECK# 



    ERROR at line 1: 



    ORA…00924: missing BY keyword 



    如果你想让数据按降序排列                 也就是说数值最大的排在最前边                   那么非常幸运         下例 



中 PAYEEs 表中的 PAYEEs 列就是按降序排列的 



    INPUT/OUTPUT 



    SQL》SELECT      *  FROM    CHECKS     ORDER     BY   PAYEE   DESC 



            CHECK#      PAYEE             AMOUNT       REMARKS 



            2           Reading R。R。      245。34       Train to Chicago 



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