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

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

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






   答  很简单   因为并没有这种事情发生        当你联合时    你只是从多个表中选出了特定 



       的列 



校练场 



1  如果一个表有 50000 行而另一个表有 100000 行时联合的结果会有多少行 



2  下边的联合属于哪一种类型的联合 



SELECT E 。NAME ; E 。EMPLOYEE_ID; EP 。SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP 



WHERE E 。EMPLOYEE_ID = EP 。EMPLOYEE_ID 



3  下边的查询语句能否工作 



  A 。 SELECT NAME; EMPLOYEE_ID; SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP 



       WHERE  EMPLOYEE_ID = EMPLOYEE_ID AND NAME LIKE '%MITH'; 



                                                         136 


…………………………………………………………Page 137……………………………………………………………

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



   B。 SELECT E。NAME ; E。EMPLOYEE_ID; EP。SALARY FROM EMPLOYEE_TBL E; EMPLOYEE_PAY_TBL EP 



     WHERE NAME LIKE  '%MITH'; 



   C。 SELECT E。NAME ; E。EMPLOYEE_ID; EP。SALARY FROM EMPLOYEE_TBL E;EMPLOYEE_PAY_TBL EP 



      WHERE  E 。EMPLOYEE_ID = EP 。EMPLOYEE_ID AND E。NAME LIKE '%MITH'; 



4   是否在联合语句中 WHERE 子句中的第一个条件应该是联合条件 



5   联合的限制为一列          是否可以有更多的列 



练习 



    1   在表的自我联合这部分            最后的一个例子返回了两个结果  请重写这个查询使它对 



       多余的记录只返回一个结果 



    2   重写下边的查询使它更可读和简炼 



        INPUT: 



        select orders。orderedon; orders。name; part。partnum;part。price; part。description 



        from orders; part 



        where orders。partnum = part。partnum and orders。orderedon 



        between '1…SEP…96' and '30…SEP…96' order by part。partnum 



    3   使用 ORDERS 表和 PART 表        返回下边的结果 



    OUTPUT 



           ORDEREDON       NAME              PARTNUM       QUANTITY 



           2…SEP…96        TRUE WHEEL        10            1 



                                                                                137 


…………………………………………………………Page 138……………………………………………………………

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



第七天        子查询         内嵌的 SQL 子句 



目标 



   子查询是一种把查询的结果作为参数返回给另一个查询的一种查询                      子查询可以让你 



将多个查询绑定在一起        到今天结束以后  你将掌握以下内容 



   l   建立一个子查询 



   l   在你的子查询中使用 EXIST       ANY 和 ALL 关键字 



   l   建立和使用子查询的关联 



注  今天的例子是使用 BORLAND  公司的 ISQL  建立的  我们在第六天使用的也是这种解 



释器   切记   这种查询没有 SQL》提示符以及行号 



建立一个子查询 



   简而言之     子查询可以让你把查询的结果与另一个查询绑定在一起                  通用的语法格式 



如下 



SYNTAX 



   SELECT * FROM TABLE1  WHERE TABLE1。SOMECOLUMN = 



   (SELECT SOMEOTHERCOLUMN FROM TABLE2 



   WHERE SOMEOTHERCOLUMN = SOMEVALUE) 



   注意一下第二个查询是如何嵌入到第一个查询之中的                 这里用 ORDERS  和 PART  表来 



举一个实例 



   INPUT 



   SELECT * FROM PART 



   OUTPUT 



       PARTNUM    DESCRIPTION         PRICE 



      54          PEDALS              54。25 



      42          SEATS               24。50 



      46          TIRES               15。25 



                                                               138 


…………………………………………………………Page 139……………………………………………………………

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



        PARTNUM       DESCRIPTION              PRICE 



        23            MOUNTAIN BIKE            350。45 



        76            ROAD BIKE                530。00 



        10            TANDEM                   1200。00 



    INPUT/OUTPUT 



    SELECT * 



    FROM ORDERS 



     ORDEREDON       NAME             PARTNUM       QUANTITY      REMARKS 



     15…MAY…1996      TRUE WHEEL      23            6             PAID 



     19…MAY…1996      TRUE WHEEL      76            3             PAID 



     2…SEP…1996       TRUE WHEEL      10            1             PAID 



     30…JUN…1996      TRUE WHEEL      42            8             PAID 



     30…JUN…1996      BIKE SPEC       54            10            PAID 



     30…MAY…1996      BIKE SPEC       10            2             PAID 



     30…MAY…1996      BIKE SPEC       23            8             PAID 



     17…JAN…1996      BIKE SPEC       76            11            PAID 



     17…JAN…1996      LE SHOPPE       76            5             PAID 



     1…JUN…1996       LE SHOPPE       10            3             PAID 



     1…JUN…1996       AAA BIKE        10            1             PAID 



     1…JUL…1996       AAA BIKE        76            4             PAID 



     1…JUL…1996       AAA BIKE        46            14            PAID 



     11…JUL…1996      JACKS BIKE      76            14            PAID 



分析 



    两表的共有字段是 PARTNUM             假如你不知道         或者是不想知道         这个字段      但是你 



又想用 PART 表的 description 字段来工作          这时可以使用子查询  语句如下 



    INPUT/OUTPUT 



    SELECT * FROM ORDERS WHERE PARTNUM = 



    (SELECT PARTNUM FROM PART WHERE DESCRIPTION LIKE 〃ROAD%〃) 



     ORDEREDON       NAME             PARTNUM       QUANTITY      REMARKS 



     19…MAY…1996      TRUE WHEEL      76            3             PAID 



     17…JAN…1996      BIKE SPEC       76            11            PAID 



     17…JAN…1996      LE SHOPPE       76            5             PAID 



     1…JUL…1996       AAA BIKE        76            4             PAID 



     11…JUL…1996      JACKS BIKE      76            14            PAID 



分析 



                                                                              139 


…………………………………………………………Page 140……………………………………………………………

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



    更进一步      如果你使用了在第六天中的概念                  你可以使 PARTNUM       列带有 



DESCRIPTION   这样就会使那些对 PARTNUM 还不太清楚的人看得更明白些                  如下例 



INPUT/OUTPUT 



SELECT O。ORDEREDON   O。PARTNUM   P。DESCRIPTION  O。QUANTITY   O。REMARKS 



FROM ORDERS O   PART P  WHERE O。PARTNUM = P。PARTNUM 



AND O。PARTNUM =(SELECT PARTNUM FROM PART 



WHERE DESCRIPTION LIKE 〃ROAD%〃) 



   ORDEREDON     PARTNUM      DESCRIPTION   QUANTITY    REMARKS 



   19…MAY…1996   76           ROAD BIKE     3          PAID 



   1…JUL…1996    76           ROAD BIKE     4           PAID 



   17…JAN…1996   76           ROAD BIKE     5           PAID 



   17…JAN…1996   76           ROAD BIKE     11          PAID 



   11…JUL…1996   76           ROAD BIKE     14          PAID 



分析 



    查询的第一部分非常熟悉 



    SELECT O。ORDEREDON   O。PARTNUM   P。DESCRIPTION  O。QUANTITY 



    O。REMARKS FROM ORDERS O    PART P 



    这里使用了别名 O 和 P  来指定了在 ORDERS  和 PART  表中你所感兴趣的 5  列  对于 



你要访问的在两个表中的名字唯一的列别名是没有必要的  可是它可以使你的语句更具有 



可读性  你看到的第一个 WHERE 子句内容如下 



    WHERE O。PARTNUM = P。PARTNUM 



    它是将 ORDERS 与 PART 表进行归并的标准语句            如果你没有使用 WHERE 子句  那 



么你将会得到两个表的记录的所有可能的组合  接下来就是子查询语句                          内容如下 



AND O。PARTNUM =(SELECT PARTNUM FROM PART WHERE DESCRIPTION LIKE 〃ROAD%〃) 



增加的限制使你的 PARTNUM  内容必须与你的子查询所返回的结果相等  子查询则非常简 



单  它要求返回以 ROAD%相符的 PARTNUM            使用 LIKE  语句是一种懒人的办法          使得 



你不必键入 ROAD  BIKE     但是这只是你侥幸         如果在 PART   表中加入了一个新的记录名 



字为 ROADKILL 时呢  这时 PART 表的内容如下 



INPUT/OUTPUT 



    SELECT * FROM PART 



            PARTNUM     DESCRIPTION             PRICE 



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