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

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

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





校练场 



应用下表的内容来回答下列问题 



       LASTNAME    FIRSTNAME   AREACODE    PHONE     ST  ZIP 

       BUNDY       AL          100         555…1111  IL  22333 

       MEZA        AL          200         555…2222  UK 

       MERRICK     BUD         300         555…6666  CO  80212 

       MAST        JD          381         555…6767  LA  23456 

       BULHER      FERRIS      345         555…3223  IL  23332 

       PERKINS     ALTON       911         555…3116  CA  95633 

       BOSS        SIR         204         555…2345  CT  95633 

写一下查询  返回数据库中所有名字以 M 开头的每一个人 



写一个查询  返回数据库 ST 为 LA 且 FIRSTNAME  以AL 开头的人 



给你两个表  PART1 和 PART2      你如何才能找出两个表中的共有元素  请写出查询 



WHERE a 》= 10 AND a  SELECT (FIRSTNAME || 'FROM') NAME; STATE 

    2    FROM  FRIENDS 



    3    WHERE  STATE  =  'IL'  AND 

    5    LASTNAME  =  'BUNDY' 



输出 



NAME               ST 

AL                  FROM IL 

仍使用上表  返回以下结果 



NAME        PHONE 

MERRICK;    BUD      300…555…6666 

MAST;       JD       381…555…6767 

BULHER;     FERRIS   345…555…3223 



EMAIL wyhsillypig@163。                                           60 


…………………………………………………………Page 61……………………………………………………………

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



EMAIL   wyhsillypig@163。                                                              61 


…………………………………………………………Page 62……………………………………………………………

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



第四天        函数     对数据的进一步处理 



目标 



   在今天我们将学习函数       在 SQL  中的函数可以执行一些储如对某一些进行汇总或或将 



一个字符串中的字符转换为大写的操作  在今天结束之际               您将学会以下内容 



   l  汇总函数 



   l   日期与时间函数 



   l  数学函数 



   l  字符函数 



   l  转换函数 



   l  其它函数 



   这些函数将大大加强你对这一周的早些时间所学习的 SQL 的基本功能所获得的数据的 



操作能力    开始的五个汇总函数  COUNT      SUM  AVG  MAX  MIN  是由 ANSI 标准 



所制定的    大多数的 SQL 解释器都对汇总函数进行了扩充          其中有一些今天会提到  在有 



些解释器这汇总函数的名称与这里所提到的不一样 



汇总函数 



   这是一组函数  它们返回的数值是基于一列的            因为你不会对单个的记录求它的平均 



数   这一部分的例子将使用 TEAMSTATS 表 



   输入 



   SQL》SELECT    FROM  TEAMSTATS 



   输出 



  NAME        POS AB  HITS WALKS SINGLES DOUBLES TRIPLES HR SO 



  JONES       1B  145 45   34    31     8      1      5   10 



  DONKNOW     3B  175 65   23    50     10     1      4   15 



  WORLEY      LF  157 49   15    35     8      3      3   16 



  DAVID       OF  187 70   24    48     4      0      17  42 



  HAMHOCKER   3B  50   12  10    10     2      0      0   13 



EMAIL wyhsillypig@163。                                    62 


…………………………………………………………Page 63……………………………………………………………

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



   CASEY        DH  1    0    0      0      0        0      0   1 



COUNT 



   该函数将返回满足 WHERE 条件子句中记录的个数  例如你想知道都有哪一个球员的 



击球数小于 350     可以这样做 



   输入/输出 



   SQL》 SELECT  COUNT(  ) FROM   TEAMSTATS   WHERE   HITS/AB 。35 



          COUNT(  ) 



          4 



   为了使这段代码更易读  可以使用别名 



   输入/输出 



   SQL》SELECT  COUNT(   ) NUM_BELOW_350   FROM   TEAMSTATS 



       WHERE   HITS/AB 。35 



          NUM_BELOW_350 



          4 



   如果我们用列名来替换掉括号中的星号时会结果与原来有什么不同呢  试一下 



   SQL》  SELECT  COUNT(NAME)   NUM_BELOW_350   FROM   TEAMSTATS 



         WHERE   HITS/AB     。35 



          NUM_BELOW_350 



          4 



   结果是一样的 因为你所选择的NAME 列与 WHERE 子句并不相关 如果你在使用 count 



时无 WHERE 子句  那么它将会返回表中的所有记录的个数 



   输入/输出 



   SQL》  SELECT  COUNT(  )  FROM  TEAMSTATS 



        COUNT(   ) 



        6 



SUM 



    SUM  就如同它的本意一样  它返回某一列的所有数值的和                 如果想知道队员总打点的 



总和是多少  试一下 



EMAIL wyhsillypig@163。                                          63 


…………………………………………………………Page 64……………………………………………………………

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



    输入 



    SQL》SELECT   SUM(SINGLES)   TOTAL_SINGLES   FROM    TEAMSTATS 



    输出 



           TOTAL_SINGLES 



           174 



    如果想得到多个列的和  可按如下所做 



    输入/输出 



    SQL》     SELECT     SUM(SINGLES)     TOTAL_SINGLES      SUM(DOUBLES) 



          TOTAL_DOUBLES    SUM(TRIPLES) TOTAL_TRIPLES  SUM(HR)   TOTAL_HR 



          FROM TEAMSTATS 



      TOTAL_SINGLES    TOTAL_DOUBLES    TOTAL_TRIPLES    TOTAL_HR 



      174              32               5                29 



    类似地    如果想找一下所有的点数在 300            包括 300   以上的的队员  则语句如下 



    输入/输出 



    SQL》SELECT  SUM(SINGLES)   TOTAL_SINGLES   SUM(DOUBLES)   TOTAL_DOUBLES 



          SUM(TRIPLES)  TOTAL_TRIPLES   SUM(HR)   TOTAL_HR   FROM   TEAMSTATS 



          WHERE   HITS/AB 》=。300 



      TOTAL_SINGLES    TOTAL_DOUBLES      TOTAL_TRIPLES    TOTAL_HR 



      164              30                 5                29 



    想估计一下一个球队的平均中球率 



    输入/输出 



    SQL》SELECT   SUM(HITS)/SUM(AB)   TEAM_AVERAGE     FROM   TEAMSTATS 



         TEAM_AVERAGE 



         。33706294 



    SUM 只能处理数字  如果它的处理目标不是数字  你将会收到如下信息 



    输入/输出 



    SQL》SELECT   SUM(NAME)    FROM   TEAMSTATS; 



    ERROR 



    ORA…01722    invalid  number 



    no rows selected 



    该错误信息当然的合理的           因为NAME 字段是无法进行汇总的 



EMAIL  wyhsillypig@163。                                               64 


…………………………………………………………Page 65……………………………………………………………

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



AVG 



   AVG 可以返回某一列的平均值         如果你想知道漏球的平均数请看下例 



   输入 



   SQL》SELECT  AVG(SO)  AVE_STRIKE_OUTS FROM  TEAMSTATS 



   输出 



           AVE_STRIKE_OUTS 



           16。166667 



   下边的例子反映了 SUM 与 AVG 的不同之处 



   输入/输出 



   SQL》SELECT  AVG(HITS/AB) TEAM_AVERAGE   FROM  TEAMSTATS 



       TEAM_AVERAGE 



       。26803448 



分析 



   可是在上一个例子中的打中率是。3370629          这是怎么回事呢      AVG  计算的是打中的次 



数与总打击次数商的平均值          然而在上一个例子中是对打中次数和打击次数分别求和后在 



进行相除的     举例来说  A  队员打了 100 杆     中了 50  次  那么他的平均值是 0。5     B  队员 



打了 1 杆   没打中  他的平均值是 0。0      而 0。0 与 0。5 的平均值是 0。25 如果你按打 101 杆 



中 50 杆计算  那么结果就会是正确的了          下边的例子将会返回正确的击中率 



输入/输出 



SQL》SELECT  AVG(HITS)/AVG(AB) TEAM_AVERAGE  FROM  TEAMSTATS 



       TEAM_AVERAGE 



       。33706294 



与 SUM 函数一样  AVG 函数也只能对数字进行计算 



MAX 



   如果你想知道某一列中的最大值  请使用 MAX             例如   你想知道谁的打点最高 



   输入 



   SQL》SELECT  MAX(HITS)  FROM  TEAMSTATS 



EMAIL wyhsillypig@163。                                       65 


…………………………………………………………Page 66……………………………………………………………

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



   输出 



           MAX(HITS) 



           70 



你能从这里知道是谁打的最多吗 



   输入/输出 



   SQL》SELECT  NAME   FROM   TEAMSTATS  WHERE   HITS=MAX  HITS 



   ERROR at line 3 



   ORA…00934  group function is not allowed here 



   很不幸  你不能      这一信息提示你汇总函数无法在 WHERE           子句中使用  但是请别灰 



心  在第 7  天的  子查询  深入 SELECT  语句  将引入子查询的概念并会给出知道谁是打 



点最多人解决方案 



   如果把它用的非数字场合会有什么情况出现呢 



   输入/输出 



   SQL》SELECT  MAX(NAME)   FROM   TEAMSTATS 



          MAX(NAME) 



          WORLEY 



   这是一个新现象  MAX       返回了最高的字符串        最大的是 z    所以说 MAX    既可以处 



理数值也可以处理字符 



MIN 



   MIN 与 MAX 类似  它返回一列中的最小数值  例如  你想知道打杆的最小值是多少 



   输入 



   SQL》SELECT  MIN  AB    FROM   TEAMSTATS 



   输出 



           MIN(AB) 



           1 



   下列语句将返回名字在字母表中排在最前边的 



   输入/输出 



   SQL》SELECT  MIN(NAME)  FROM   TEAMSTATS 



EMAIL wyhsillypig@163。                                         66 


…………………………………………………………Page 67……………………………………………………………

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



        MIN(NAME) 



        CASEY 



   你可以同时使用 MAX 和 MIN 函数以获得数值的界限  例如 



   输入/输出 



    SQL》SELECT  MIN  AB   MAX  AB    FROM   TEAMSTATS 



          MIN(AB)   MAX(AB) 



          1         187 



   对于统计函数来说这一信息有时非常有用 



   注   我们在今天开始曾说过         这五个函数是由 ANSI      标准所定义的  其余的函数也已 



经成为了事实上的标准  你可以在所有的 SQL 解释器中找到它们                   这里   我们使用的它们 



在 ORACLE7  中的名字  在其它的解释器中它们的名称可能与这里提到的不同 



VARIANCE 



   VARIANCE   方差   不是标准中所定义的        但它却是统计领域中的一个至关重要的数 



值  使用方法如下 



   输入 



    SQL》SELECT  VARIANCE  HITS FROM   TEAMSTATS 



   输出 



           VARIANCE(HITS) 



           802。96667 



    如果我们在将它应用于字符串 



   输入/输出 



    SQL》SELECT  VARIANCE  NAME   FROM  TEAMSTATS 



   ERROR 



   ORA…01722  invalid number 



   No  rows selected 



   可见  VARIANCE 也是一个只应用于数值对象的函数 



EMAIL wyhsillypig@163。                                         67 


…………………………………………………………Page 68……………………………………………………………

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



STDDEV 



    这是最后一个统计函数         STDDEV 返回某一列数值的标准差  它的应用示例如下 



    输入 



    SQL》SELECT  STDDEV   HITS FROM   TEAMSTATS 



    输出 



             STDDEV(HITS) 



             28。336666 



    同样  对字符型列应用该函数时会得到错误信息 



    输入/输出 



    SQL》SELECT  STDDEV(NAME)   FROM  TEAMSTATS 



    ERROR 



    ORA…01722   invalid  number 



   no rows selected 



    这些统计函数也可以在一个语句中同时使用 



    输入/输出 



    SQL》SELECT  COUNT   AB   AVG(AB)  MIN(AB)  MAX(AB)   STDDEV(AB) 



       VARIANCE(AB)   SUM(AB)  FROM  TEAMSTATS 



COUNT(   AVG(A   MIN(A   MAX(    STDDEV(  VARIANCE   SUM(A 



AB)      B)      B)      AB)    AB)       (AB)       B) 



6         119。167 1      187     75。589   5712。97    715 



    当你下次见到比赛结果时  你应该知道了 SQL 正在它的后台工作 



日期/ 时间函数 



    我们的生活是由日期和时间来掌握的             大多数的 SQL 解释器都提供了对它进行支持的 



函数  在这一部分我们使用 PROJECT 表来演求日期和时间函数的用法 



    输入 



    SQL》 SELECT *  FROM   PROJECT 



    输出 



       TASK            STARTDATE    ENDDATE 



EMAIL wyhsillypig@163。                                           68 


…………………………………………………………Page 69……………………………………………………………

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



       KICKOFFMTG          01…APR…95   01…APR…95 



       TECHSURVEY          02…APR…95   01…MAY…95 



       USERMTGS            15…MAY…95   30…MAY…95 



       DESIGNWIDGET        01…JUN…95   30…JUN…95 



       CODEWIDGET          01…JUL…95   02…SEP…95 



       TESTING             03…SEP…95   17…JAN…96 



    注  这里的数据类型使用日期型           大多数 SQL 解释器都有日期型  但是在语法的细则 



上有不同之处 



ADD_MONTHS 



    该函数的功能是将给定的日期增加一个月                举例来说     由于一些特殊的原因  上述的 



计划需要推迟两个月         那么可以用下面的方法来重新生成一个日程表 



    输入 



    SQL》SELECT  TASK  STARTDATE   ENDDATE 



       ORIGINAL_END   ADD_MONTHS(ENDDATE;2)   FROM   PROJECT 



    输出 



     TASK         STARTDATE    ORIGINAL    ADD_MONTH 



  KICKOFFMTG      01…APR…95    01…APR…95    01…JUN…95 



  TECHSURVEY      02…APR…95    01…MAY…95     01…JUL…95 



   USERMTGS       15…MAY…95    30…MAY…95     30…JUL…95 



 DESIGNWIDGET     01…JUN…95    30…JUN…95    31…AUG…95 



  CODEWIDGET       01…JUL…95   02…SEP…95    02…NOV…95 



    TESTING        03…SEP…95   17…JAN…96    17…MAR…96 



    尽管这种延误不太可能发生           但是实现日程的变动却是非常容易的               ADD_MONTHS 



也可能工作在 SELECT 之外  试着输入 



    输入 



    SQL》SELECT  TASK  TASKS_SHORTER_THAN_ONE_MONTH 



       FROM   PROJECT  WHERE ADD_MONTHS(STARTDATE     1)  ENDDATE 



    结果如下所示 



    输出 



          TASKS_SHORTER_THAN_ONE_MONTH 



EMAIL wyhsillypig@163。                                           69 


…………………………………………………………Page 70……………………………………………………………

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



          KICKOFF MTG 



          TECH SURVEY 



          USER MTGS 



          DESIGN WIDGET 



分析 



    你将会发现这一部分中的几乎所有的函数都可能工作在不只一个地方                            但是   如果没 



有 TO_CHAR 和 TO_DATE 函数的帮助  ADD_MONTH 就无法在字符或数字类型中工作 



这将在今天的晚些时候讨论 



LAST_DAY 



    LAST_DAY 可以返回指定月份的最后一天  例如               如果你想知道在 ENDDATE 列中的 



给出日期中月份的最后一天是几号时               你可以输入 



    输入 



    SQL》SELECT   ENDDATE   LAST_DAY   ENDDATE     FROM   PROJECT 



    结果如下 



    输出 



            ENDDATE     LAST_DAY(ENDDATE) 



            01…APR…95    30…APR…95 



            01…MAY…95    31…MAY…95 



            30…MAY…95    31…MAY…95 



            30…JUN…95    30…JUN…95 



            02…SEP…95    30…SEP…95 



            17…JAN…96    31…JAN…96 



    如果是在闰年的最后一天呢 



    输入/输出 



    SQL》SELECT   LAST_DAY(   1…FEB…95 ) NON_LEAP   LAST_DAY(   1…FEB…96 ) 


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