友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

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

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




                       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  日自学通(
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!