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

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

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





很快  但是灵活性很差  这在今天的商业应用领域是不适宜的  动态 SQL 这里就不多说了 



   ANSI…92  标准将 SQL  语言标准扩展为一种国际化的标准    它定义了 SQL  的三种编译 



级别  登录调用    内嵌子句和完全编译  主要的新特性如下 



   l  联接到数据库 



   l  移动游标 



   l  动态 SQL 



   l  外连接 



   本书除了这些扩展以外还包括了第三方数据库供应商所提供的扩展              动态 SQL 允许你 



在运行时修改 SQL  语句  但是它的速度要比内嵌型 SQL  慢      它在调用级接口上为应用程 



序开发人员提供了相当大的灵活性        ODBC 或 Sybase 的 DB…Library 就是动态 SQL 的例子 



   调用级接口对于编程人员来说不是一个新概念          当您在使用 ODBC  时  举例来说   你 



需要在 SQL 语句提交给数据库时修改子句中的变量参数而使用该功能  在设计阶段可以通 



过使用其它的函数调用接收错误信息或结果          结果是以数据包的形式返回的 



摘要 



在第一天介绍了 SQL   的历史   由于 SQL  与关系型数据库是紧密结合的  所以第一天也简 



要地介绍了关系型数据库的历史和它的功能          明天我们将讲述 SQL  中最为常用的功能— — 



查询 



EMAIL wyhsillypig@163。                              29 


…………………………………………………………Page 30……………………………………………………………

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



问与答 



问  为什么我要了解 SQL 



答  到现在为止  如果你不知道如何利用大型数据库来进行工作             如果你要使用客户机/ 服 



   务器型应用程序开发平台         如  Visual  Basic Visual   C++ ODBC Delphi 和 



   PowerBuilder 以及一些已经移植到 PC 平台上的大型数据库系统         如  Oracle 和 



   Sybase 来进行开发工作  那么你只有学习 SQL     的知识  在今天大多数的商用程序开 



   发都需要你了解 SQL 



问  在学习 SQL 时我为什么要了解关系型数据库系统 



答  SQL  在为关系型数据库系统开发的      不知道点关系型数据库系统的知识你就无法有效 



   地使用 SQL 



问  在 GUI 图形用户界面工具下我只需按按钮就可以写出 SQL  语句         为什么我还需要学 



   习手工写 SQL 



答  GUI  有 GUI  的方法  手工有手工的方法  一般说来手工写出来的 SQL  比 GUI  写出来 



   的更有效率  GUI  的 SQL 语句没有手工写出的易读     而且如果你知道如何用手工来写 



   SQL 的话那么你在使用 GUI 时就会有更高的效率 



问  既然 SQL 是一种标准化语言  那是不是说我可以用它在任何数据库下进行编程 



答  不是  你只能将它用于支持 SQL 的关系型数据库系统  如 MS…Access      Oracle Sybase 



   和 Informix 尽管不同的系统在执行时有所差别  但是你只需要对你的 SQL  语句进行 



   很小的调整 



校练场 



  在校练场里我们提出了一些问题以帮助你巩固自己所学             这些练习可以提高你在学习中 



的经验  请试着回答和练习附录五        问答与练习  中的内容 



   1  为什么说 SQL 是一种非过程型语言 



   2  我如何知道一种数据库系统是不艺机是关系型数据库系统 



   3  我可以用 SQL 来做什么 



   4  把数据清楚地分成一个个唯一集的过程叫什么名字 



EMAIL wyhsillypig@163。                               30 


…………………………………………………………Page 31……………………………………………………………

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



练习 



    确认一下你所使用的数据库系统是否是一个关系型数据库系统 



EMAIL wyhsillypig@163。                                          31 


…………………………………………………………Page 32……………………………………………………………

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



第二天      查询 —  — SELECT 语句的使用 



目标 



   欢迎来到第二天  在今天你将学习到以下内容 



   l  如何写 SQL 的查询 



   l  将表中所有的行选择和列出 



   l  选择和列出表中的选定列 



   l  选择和列出多个表中的选定列 



背景 



   在第一天中我们简要地介绍了关系型数据库系统所具有的强大功能          在对 SQL 进行了 



简要的介绍中我们知道了如何同它进行交流        最终  我们将会与计算机用一种非常清楚 



果断的话说    给我看一下所有在本公司中工作十年以上       左撇子  蓝眼睛的外国人    如 



果你能够这样做    与计算机交流  而不是查他们的档案     每一个人都可以用他自己的方法 



来达到目的  但是你却是用 SQL 的一种重要功能— — 查询来达到目的 



   在第一天中我们说过    查询一词用在 SQL 中并不是很恰当  在 SQL  中查询除了向数 



据库提出问题之外还可以实现下面的功能 



     l  建立或删除一个表 



     l  插入  修改  或删除一个行或列 



     l  用一个特定的命令从几个表中查找所需要的信息并返回 



     l  改变信息的安全性 



   SQL 的查询当然也能进行一般的查询工作  在学会使用这个有用的工具之前         我们来 



学习如何写 SQL 的查询语句 



一般的语法规则 



   正如你所看到的那样    SQL 有很高的灵活性  尽管在任何程序中都有一定的规则限制 



EMAIL wyhsillypig@163。                         32 


…………………………………………………………Page 33……………………………………………………………

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



下而有一个 SQL  中 SELECT  语句使用的简单例子  请注意         在每个 SQL  语句的关键字都 



是大写的    并且用空格将他们划分出来 



SELECT NAME   STARTTERM  ENDTERM 



FROM  PRESIDENTS 



WHERE  NAME    LINCOLN 



   在这个例子中每一个字母都是大写的            但是这不是必需的       上边的查询语句完全可以 



写成这样 



select name startterm endterm 



from presidents 



where name  LINCOLN 



   注意  LINCOLN  在这里仍然是大写的       尽管 SQL  语句对大小写并不敏感  但在数据 



库中的数据却是大小写敏感的          举例来说    许多公司在储存数据时用大写字母           在这种情 



况下  所有的字段名也将是大写字母          那么在检索条件为 name='Lincoln' 的数据时将不会得 



到任何结果  这种情况在每个实例应用中都会遇到 



   注意   在 SQL 语句中大小写是不敏感的 



   现在我们来看另一个例子         在这个例子中的空格有问题吗          不是  这个语句完全可以 



正常执行 



   Select name startterm endterm from presidents where name='LINCOLN' 



   但是   如果你注意在你的语句中使用空格和大写字母会增强语句的可读性                    当它变成 



你的工程    编程   的一部分时会更便于维护 



   另一个重要的特性是分号         当在 SQL 语句中出现分号就意味着本条语句已经结束 



   为什么在格式中大小写是不重要的           原因何在  答案是 — — 关键字      关键字是 SQL 语 



法中的保留字  在 SQL 语句中       关键字是可选择的  但其内容有强制性           在本例中的关键 



字有 



   SELECT 



   FORM 



   WHERE 



   看一下目录     你会找到需要在其它几天中学习的关键字 



EMAIL wyhsillypig@163。                                     33 


…………………………………………………………Page 34……………………………………………………………

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



数据报的形成 — — SELECT  和 FROM 



   随着对 SQL  的了解  你会发现你键入的 SELCT 和 FROM 在远远多于其它的关键字 



它不像 CREATE 那样迷人或像 DROP 那样残忍  但是如果你在同计算机会话并需要计算机 



返回结果时它们却是必不可少的           这与最初选择何种数据库没有关系 



   我们先从 SELECT 开始讨论       因为 SELECT 是在 SQL 中使用最为频繁的语句 



语法 



   SELECT   



   没有其它的语句可以比 SELECT  语句更简单了  但是 SELECT  语句不从独立工作                如 



果你只是键入了 SELECT 语句       那么你将会收到如下信息 



   输入 



       SQL》 SELECT; 



   输出 



       SELECT 



          * 



       ERROR at line 1 



       ORA…00936   missing  expression 



    当在访问 ORACLE  时会有*出现以表示有事件产生  错误信息的意思是告诉你有一个 



东西丢了  这个丢失的东西就是 FROM 子句 



语法 



   FROM  



    当两条语句结合使用时就有了后台访问数据库的能力 



注  你可能会对子句       关键字  或 SQL  语句感到费解       SQL  的关键字是 SQL  中的特定元 



   素 如SELECT 和FROM    子句则是SQL 语句的一部分 如; SELECT column1; column2; 。。。 



   就是一个子句 而 SQL 语句则是几个子句的结合 例如你可以将 SELECT 子句和 FROM 



   子句组合成为一个 SQL 语句 



注  每一个种 SQL  都有其特定的出错信息  例如 Microsoft  Query  会显示说它不能运行查 



   询   并引导你发现错误所在  Borland's  Interbase  将会弹出一个错误对话框  Personal 



EMAIL wyhsillypig@163。                                        34 


…………………………………………………………Page 35……………………………………………………………

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



    Oracle7 的引擎将会出现如前所述的信息 并给出一个错误号码 所以当你手工输入 SQL 



    语句时会看到详细的错误信息                以及对错误的简要诠释 



例子 



    在进一步学习之前           我们先来看一个将要在下面的例子中用到的数据库                          这个数据库 



体现了 SELECT 和 FROM  的基本功能  在实际应用时我们将会用到在第 8 天                            熟练地操作 



数据    中讲到的技巧来构建这个数据库  但是我们现在的目的是学习如何使用 SELECT                                   和 



FROM    所以我们假设数据库已经建好了                 本例中使用 CHECKS 表          这个表的内容如下 



         CHECK#           PAYEE          AMOUNT           REMARKS 



            1          MaBell                  150       Havesonsnexttime 



            2          ReadingR。R。          245。34       TraintoChicago 



            3          MaBell               200。32       CellularPhone 



            4          LocalUtilities           98       Gas 



            5          JoesStaleDent          150       Groceries 



            6           Cash                    25       WildNightOut 



            7          JoansGas               25。1       Gas 



你的第一个查询 



输入 



    SQL》select * from checks 



输出 



     CHECK#    PAYEE                 AMOUNT         REMARKS 



            1  Ma Bell                     150      Have sons next time 



            2  Reading R。R              245。34      Train to Chicago 



            3  Ma Bell                  200。32        Cellular  Phone 



            4   Local Utilities              98     Gas 



            5   Joes Stale  Dent          150        Groceries 



            6   Cash                        25       Wild Night Out 



            7   Joans Gas                 25。1        Gas 



    7 rows selected。 



分析 



    请看例子的输出结果            注意第 1 列和第 3 列是右对齐的而第 2 列和第 4 列是左对齐的 



EMAIL   wyhsillypig@163。                                                     35 


…………………………………………………………Page 36……………………………………………………………

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



这是因为对于数字类型采用右对齐而对于字符类型则是采用左对齐的  数据的类型将在第 



9 天的  表的建立与维护         中讨论 



    在 SELECT  中的*表示要返回 FROM       中所指定的表中的所有列  并按照数据库中的固 



有顺序来排序 



完成一个 SQL 语句 



    在 SQL 运行时  分号       即意味着通知解释程序当前语句已经结束 例如 SQL*PLUS 



在没有遇到分号时将不会执行语句  但是在其它的 SQL 解释器中可能不会用到分号  例如 



Microsoft  Query 和  Borland's  ISQL  不需要查询终止符 因为你是在编辑框中输入查询语句 



并且当你在按下按钮以后才开始执行查询 



对列进行排序 



    在前边的例子中使用了*来选择了选定表格中的所有列                    并且是按照其在数据库中的固 



定顺序来排序的  如果需要对特定的列排序  你应该按下边所写的那样输入 



    输入 



    SQL》 SELECT   payee    remarks     amount     check#   from   checks; 



    注意在 SELECT   子句中给出了每个列的名字  排序是根据列的先后顺序来进行的                        注 



意将最后列的列名与其后的子句  这里是 FROM                用空格分开  输出的结果如下 



    输出 



       PAYEE          REMARKS           AMOUNT      CHECK# 



       Ma Bell        Have sons next time 150       1 



       Reading R。R。   Train to Chicago  245。34      2 



       Ma Bell        Cellular Phone    200。32      3 



       Local Utilities Gas              98          4 



       Joes Stale  Dent Groceries       150        5 



       Cash           Wild Night Out    25          6 



       Joans Gas      Gas               25。1        7 



    7 rows selected。 



    这句话也可以写成下边的形式 



输入 



EMAIL  wyhsillypig@163。                                            36 


…………………………………………………………Page 37……………………………………………………………

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



    SELECT payee; remarks; amount; check# 



    FROM checks; 



    注意  这里的 FROM 子句已经写到第二行了  这是一种个人习惯  其输出的结果如下 



输出 



     PAYEE           REMARKS              AMOUNT         CHECK# 



     Ma Bell         Have sons next time        150         1 



     Reading R。R。    Train to Chicago         245。34         2 



     Ma Bell           Cellular  Phone       200。32          3 



     Local Utilities Gas                          98        4 



     Joes Stale  Dent Groceries                 150        5 



     Cash            Wild Night Out               25        6 



     Joans Gas       Gas                       25。1         7 



    7 rows selected。 



    分析 



    语句的格式变更不会对输出的结果造成影响  现在你已经知道了如何对输出的结果进 



行排序  试着将表格的列按照你的要求进行排序 



选择特定的列 



    如果你不想看到数据库中的每一列                   当然  你使用 SELECT  *将所有的列显示出是可 



行的  但是如果你只想看一下 CHECKS  中的号码与数量列  那么你可以输入如下语句 



    输入 



    SQL》 SELECT CHECK#; amount from checks; 



输出 



        CHECK#     AMOUNT 



            1            150 



            2         245。34 



            3         200。32 



            4             98 



            5            150 



            6             25 



            7           25。1 



    现在你可以按要求显求所需要的列  注意大小写的使用  它不会对查询的结果造成影 



EMAIL   wyhsillypig@163。                                                     37 


…………………………………………………………Page 38……………………………………………………………

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



响 



如何从不同的表中查找到所需要的信息呢 



从不同的表中选择 



    假设你有一个名为 DEPOSITS 表        其内容如下 



输出 



       DEPOSIT#    WHOPAID     AMOUNT       REMARKS 



       1           Rich Uncle  200          Take off Xmas list 



       2           Employer     1000        15 June Payday 



       3           Credit Union 500         Loan 



分析 



    你需要对数据源作一下简单的改动 



查找不重复的数据 



    如果你看过原来的 CHECKS 表  你会发现其中有一些数据是重复的  例如  AMOUNT 



列 



输入 



       SQL》 select amount  from  checks 



输出 



    AMOUNT 



    150 



    245。34 



    200。32 



    98 



    150 



    25 



    25。1 



    请注意    150 在这里是重复的       如果你只想查看不重复的数据  可以这样做 



输入 



    SQL》 select DISTINCT amount from checks; 



输出 



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