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

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

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


          BAKER       104             5        23 

          BLEDSOE     107             8        45 

          BOLIVAR     233             4        80 

          BOLD        210             15       100 

          COSTALES    211             10       78 



6 rows selected。 

假设你的公司的雇员每年可以有 12 天的休假时间  现在使用你所知道的逻辑运算来实现以 



下要求  名字是以 B 开头并且他的休假时间已经超过了 50 天的员工 



输入/输出 



EMAIL wyhsillypig@163。                                           54 


…………………………………………………………Page 55……………………………………………………………

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



SQL》  SELECT   LASTNAME    YEARS   * 12  LEAVETAKEN    REMAINING 



FROM   VACATION   WHERE   LASTNAME    LIKE    B%    AND 

YEARS   *12 LEAVETAKEN    50 



            LASTNAME     REMAINING 

            BLEDSOE       51 

            BOLD          80 

分析 



这个查询语句是你讫今为止学到的最为复杂的语句                     SELECT 子句中使用了算术运算符来 



确定每一个员工还有多少天剩余的假期                标准的算式为 YEARS  *  12  –  LEAVETAKEN    而 



更为清楚的表达方法为  YEARS * 12)         LEAVETAKEN 



LIKE  中使用了通配符%来发现所有的以 B 开头的员工                而比较运算的       则用来发现所有休 

假时间超过 50 天的员工 



这里我们使用了逻辑运算符号 AND 来使查找到的记录同时满足两个条件                          带下划线的 



AND 

AND  只有当两个表达式的值都为真的时候才会返回真  如果任意一个表达式的值不是真 



那么结果就会是假的         例如    找一下在你的公司中工作不超过 5  年但是剩余的休假时间超 

过 20 天的员工 



输入 



SQL》   SELECT   LASTNAME     FROM    VACATION   WHERE    YEARS20 



输出 



      LASTNAME 

      BAKER 

      BOLIVAR 

如果你想知道在你的公司中工作时间  年以上人员工和休假时间不足已有假期的                                   的 



员工呢  你可以写成下边这样 

输入/输出 



SQL》 SELECT LASTNAME WORKAHOLICS 



    2    FROM  VACATION 



    3    WHERE  YEARS  》=  5 



    4    AND 

    5    ((YEARS  *12)…LEAVETAKEN)/(YEARS  *  12)  《  0。50 



         WORKAHOLICS 

         BAKER 

         BLEDSOE 

给这些人放假吧        也让我们结束对 AND 的学习 



OR 

你也可以使用 OR  来对几个条件进行合并               当其中的任一个条件为真时  其结果就会为真 



值   为了展示它与 AND 的不同  下面我们用 OR 来换掉上一个例子中的 AND 



输入: 



SQL》 SELECT LASTNAME WORKAHOLICS 



    2    FROM  VACATION 



    3    WHERE  YEARS  》=  5 



    4    OR 

    5      ((YEARS  *12)…LEAVETAKEN)/(YEARS  *  12)  》=  0。50 

输出: 



EMAIL  wyhsillypig@163。                                             55 


…………………………………………………………Page 56……………………………………………………………

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



         WORKAHOLICS 

         ABLE 

         BAKER 

         BLEDSOE 

         BOLD 

         COSTALES 

分析 



上例中的结果仍然在其中  但是我们又多个几个记录                      这几个记录出现的原因是它们满足 



我们所提出的条件中的一个  OR 只要记录满足其中的一个条件就会把记录返回 



NOT 

顾名思义     它对条件取反       条件为假时结果为真          条件为真时结果为假 

下边的 SELECT 子句将返回所有开头的名字不是 B 的员工 



输入 



SQL》 SELECT * 



    2    FROM  VACATION 

    3    WHERE  LASTNAME  NOT  LIKE  'B%' 

输出: 



LASTNAME      EMPLOYEENUM      YEARS     LEAVETAKEN 

ABLE          101              2         4 

COSTALES      211               10       78 

当 NOT  应用于NULL 时可以使用操作符 IS          让我们再来看一下 PRICES 表中WHOLESALE 



列 ORANGES 记录中的空值 



输入/输出: 



SQL》 SELECT * FROM PRICE 



ITEM          WHOLESALE 

TOMATOES     。34 

POTATOES     。51 

BANANAS      。67 

TURNIPS      。45 

CHEESE       。89 

APPLES       。23 

ORANGES 



7 rows selected。 

想找出所有的非空项  可以写出如下语句 



输入/输出: 



SQL》SELECT * FROM PRICE WHERE WHOLESALE IS NOT NULL 



ITEM          WHOLESALE 

TOMATOES     。34 

POTATOES     。51 

BANANAS      。67 

TURNIPS      。45 

CHEESE       。89 

APPLES       。23 



6 rows selected。 

集合运算     SET 



在第一天     介绍 SQL    中我们已经知道了 SQL 是基于集合的理论的                下面这一部分将讨论 

集合运算 



UNION 与 UNION ALL 



UNION 将返回两个查询的结果并去除其中的重复部分                    下边有两个值勤人员表 



EMAIL  wyhsillypig@163。                                              56 


…………………………………………………………Page 57……………………………………………………………

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



输入: 



SQL》 SELECT * FROM FOOTBALL 

输出: 



            NAME 

            ABLE 

            BRAVO 

            CHARLIE 

            DECON 

            EXITOR 

            FUBAR 

            GOOBER 



7 rows selected。 

输入: 

SQL》 SELECT * FROM SOFTBALL 



输出: 



         NAME 

         ABLE 

         BAKER 

         CHARLIE 

         DEAN 

         EXITOR 

         FALCONER 

         GOOBER 



7 rows selected。 

在这两个表中有哪些不重复的人员呢 



输入/输出: 



SQL》 SELECT NAME FROM SOFTBALL 



    2    UNION 

    3    SELECT  NAME  FROM  FOOTBALL 



       NAME 

       ABLE 

       BAKER 

       BRAVO 

       CHARLIE 

       DEAN 

       DECON 

       EXITOR 

       FALCONER 

       FUBAR 

       GOOBER 

10 rows selected。 

UNION 返回了两个表中的 10 个记录  它们是不重复的  但是两个表中共有多少人呢                             包 



括重复的人员 



输入/输出: 



SQL》 SELECT NAME FROM SOFTBALL 

    2    UNION  ALL 

    3    SELECT  NAME  FROM  FOOTBALL 



       NAME 

       ABLE 



EMAIL  wyhsillypig@163。                                               57 


…………………………………………………………Page 58……………………………………………………………

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



       BAKER 

       CHARLIE 

       DEAN 

       EXITOR 

       FALCONER 

       GOOBER 

       ABLE 

       BRAVO 

       CHARLIE 

       DECON 

       EXITOR 

       FUBAR 

       GOOBER 



14 rows selected。 

分析 



可以看到  UNION  ALL 与 UNION 一样对表进行了合并  但是它不去掉重复的记录                  可是 

如果我们想知道都有谁同时在两个表中呢                UNION 无法做到这一点        我们需要学习使用 



INTERSECT 



INTERSECT  相交 



INTERSECT 返回两个表中共有的行  看下例           它将返回两个表中有存在的员工 



输入: 



SQL》 SELECT * FROM FOOTBALL 



    2    INTERSECT 

    3    SELECT  *  FROM  SOFTBALL 



输出 



        NAME 

        ABLE 

        CHARLIE 

        EXITOR 

        GOOBER 

分析 



这些记录是两个表中都存在的 



MINUS   相减 

MINUS 返回的记录是存在于第一个表中但不存在于第二个表中的记录  例如 



输入: 



SQL》 SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL 



输出 



          NAME 

          BRAVO 

          DECON 

          FUBAR 

上例中显示了三个不在垒球队中的足球队员                如果你把语句的次序颠倒  那么你将得到在 



垒球队中但不在足球队中的队员 

输入: 



SQL》 SELECT * FROM SOFTBALL MINUS SELECT * FROM FOOTBALL 



输出 



        NAME 

        BAKER 

        DEAN 



EMAIL wyhsillypig@163。                                          58 


…………………………………………………………Page 59……………………………………………………………

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



         FALCONER 

从属运算  IN and BETWEEN 



这两个运算符对你已经做过的例子提供了更快捷的操作                          如果你想找一个你在 Colorado; 

California;和 Louisiana  的朋友  可以输入 



输入: 



SQL》  SELECT  *  FROM  FRIENDS  WHERE  STATE=  'CA'  OR  STATE  ='CO'  OR  STATE  = 

'LA' 



输出 



LASTNAME     FIRSTNAME    AREACODE     PHONE      ST     ZIP 

MERRICK      BUD          300          555…6666   CO     80212 

MAST         JD           381          555…6767   LA     23456 

PERKINS      ALTON        911          555…3116   CA     95633 

也可以输入 



输入/输出: 

SQL》 SELECT * FROM FRIENDS WHERE STATE IN('CA';'CO';'LA') 



LASTNAME     FIRSTNAME    AREACODE     PHONE      ST     ZIP 

MERRICK      BUD          300          555…6666   CO     80212 

MAST         JD           381          555…6767   LA     23456 

PERKINS      ALTON        911          555…3116   CA     95633 

分析 

第二个实例比第一个更易读和简捷  我想你一会再用以前的方法来工作了吧                                 在 IN   中也 



可以使用数字  例如 



输入/输出: 



SQL》 SELECT * 



    2    FROM  FRIENDS 

    3    WHERE  AREACODE  IN(100;381;204) 



LASTNAME     FIRSTNAME     AREACODE     PHONE      ST    ZIP 

BUNDY        AL             100         555…1111   IL     22333 

MAST         JD            381          555…6767   LA     23456 

BOSS         SIR           204          555…2345   CT     95633 

如果你想要查找符合某一范围的记录  例如 

输入/输出: 



SQL》   SELECT  *  FROM   PRICE  WHERE   WHOLESALE     0。25  AND  WHOLESALE 



  0。75 



             ITEM          WHOLESALE 

             TOMATOES     。34 

             POTATOES     。51 

             BANANAS      。67 

             TURNIPS      。45 

或使用 BEWTEEN      你可以这样写 



输入/输出: 



SQL》SELECT    * FROM   PRICE  WHERE   WHOLESALE     BETWEEN   0。25 AND   0。75 



             ITEM          WHOLESALE 

             TOMATOES     。34 

             POTATOES     。51 

             BANANAS      。67 

             TURNIPS      。45 

看   第二个是不是比第一个更清楚和易读 



EMAIL  wyhsillypig@163。                                                  59 


…………………………………………………………Page 60……………………………………………………………

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



注   如果批发价为 0。25  的商品在表中存在  那么它们也将会被返回  BETWEEN  操作将包 



括边界值 

摘要 



在第三天我们学会了使用最基本的 SELECT 子句和 FROM 子句                 现在我们已经掌握了最为 



常用的操作来使数据库返回的结果满足你的要求  你学会了使用算术                         比较  字符和逻辑 



操作   这为你进一步学习 SQL 打下了良好的基础 



问与答 

问  如果我不想使用命令行的 SQL 那么学习这些东西对我有什么用 



答   不论你使用内嵌 SQL  的 COBOL 还是微软的 ODBC           它们所使用的 SQL  结构都是一 



样的   所以你现在学习的东西将会更有助于你以后的学习 



问  既然 SQL 是一种标准  那为什么又种是让我检查一下自己的解释器呢 



答   我们所使用的是 ANSI1992     标准  但大多数供应商对它进行了修改以使它更适用于自 

己的数据库  我们是以 ANSI1992 标准为基础的  但在具体使用时要注意它们的不同 



校练场 



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



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