八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第16部分

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

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

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




如果你想查找所有以  开头的州             可以使用如下语句 



输入/输出 



SQL》  SELECT   *  FROM   FRIENDS  WHERE    STATE  LIKE    C_ 



      LASTNAME     FIRSTNAME    AREACODE    PHONE      ST    ZIP 

      MERRICK      BUD          300         555…6666   CO    80212 

      PERKINS      ALTON        911         555…3116   CA    95633 

      BOSS         SIR          204         555…2345   CT    95633 

也可以在一个语句中使用多个下划线  如 



输入/输出 



SQL》  SELECT   *  FROM   FRIENDS  WHERE    PHONE   LIKE   555…6_6_ 



       LASTNAME     FIRSTNAME   AREACODE     PHONE     ST   ZIP 

       MERRICK      BUD          300         555…6666  CO   80212 

       MAST         JD           381         555…6767  LA   23456 

这个语句也可以写成如下形式 



输入/输出 

SQL》  SELECT   *  FROM   FRIENDS  WHERE    PHONE   LIKE  555…6% 



LASTNAME    FIRSTNAME     AREACODE    PHONE     ST    ZIP 

MERRICK     BUD           300         555…6666  CO    80212 

MAST        JD            381         555…6767  LA    23456 

看   它们的结果是一样的  这两个通配符也可以联合起来使用                      下边的例子将找出所有的 



第   个字母为     的记录 



输入    输出 



SQL》  SELECT   *  FROM   FRIENDS  WHERE    FIRSTNAME   LIKE  _L% 



LASTNAME    FIRSTNAME     AREACODE    PHONE     ST    ZIP 

BUNDY       AL            100         555…1111  IL    22333 

MEZA        AL            200         555…2222  UK 

PERKINS     ALTON         911         555…3116  CA    95633 

连接 



  可以将两个字符串连接起来  例如 

输入 



SQL》  SELECT   FIRSTNAME   || LASTNAME    ENTIRENAME   FROM   FRIENDS 



输出 



                       ENTIRE           NAME 

                       AL               BUNDY 

                       AL               MEZA 

                       BUD              MERRICK 

                       JD               MAST 

                       FERRIS           BULHER 

                       ALTON            PERKINS 

                       SIR              BOSS 

7 rows selected。 



EMAIL  wyhsillypig@163。                                             53 


…………………………………………………………Page 54……………………………………………………………

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



分析 



请注意这里使用的是         而不是    号   如果你试图使用       号来连接两个字符串的话  对于我 

们使用的 SQL 解释程序(Personal Oracle7)将会产生如下错误信息 



输入/输出 



SQL》  SELECT  FIRSTNAME       LASTNAME   ENTIRENAME   FROM   FRIENDS 



ERROR 



ORA…01722  invalid number 

它试图将两个数字做加法运算  但是它没有在表达式中找到任何数字 



注   有一些解释器也采用加号来连接字符串  请检查一下你的解释器 



对于连接字符串这里有更多的实例 



输入/输出 



SQL》  SELECT  LASTNAME    ||     || FIRSTNAME  NAME   FROM  FRIENDS 



NAME 

BUNDY          AL 

MEZA            AL 

MERRICK       BUD 

MAST            JD 

BULHER        FERRIS 

PERKINS      ALTON 

BOSS            SIR 



7  rows selected。 

分析 

这条语句在姓与名之间插入了一个逗号 



注  请注意在姓与名之间的多余的空格              这些空格是数据的一部分  对于确定的数据类型 



空格将右填充至达到字段的设定宽度  请检查你的解释器                    有关数据类型内容将在第 9         天 



的  表的创建与维护        中讨论 



至现在为止你已经学完了所有的比较操作符                 对于一些问题这种方法非常好            可是如果你 

是想找出所有的名字中的第一个字母为 P               并且他的应有的休假时间已经超过了 3             天的人 



呢 



逻辑运算 



逻辑运算用于 SQL 的 WHERE 子句中将两个或更多条件组合在一起 



休假的时间总是人们在工作时讨论的热门话题  现在我们来为财务部门设计一个名为渡假 

  VACATION  的表    内容如下 



输入 



SQL》  SELECT  *  FROM   VACATION 



输出 



          LASTNAME    EMPLOYEENUM     YEARS    LEAVETAKEN 

          ABLE        101             2        4 

          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)                 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的