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

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

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





将在今天提到 



注  今天的例子是用 Personal  Oracle7 做的  请注意它与其它的命令解释器在语句上和数据 



                                                     158 


…………………………………………………………Page 159……………………………………………………………

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



   返回的形式上的不同之处 



插入语句 



   INSERT  语句允许你向数据库中输入数据           它有两种写法 



   INSERT    VALUES 和 INSERT SELECT 



INSERT VALUES 语句 



   该语句每次向表中输入一条记录             如何操作的规模小       只有几条语句需要输入时它是 



非常有用的     该语句的语法形式如下 



   SYNTAX 



       INSERT  INTO  table_name    (col1;  col2。。。)  VALUES    (value1;  value2。。。) 



   该语句的作用是向表中加以一个新的记录               其数值为你所指定的数值          使用该语句向 



表中插入数据时你必须遵循以下三条规则 



    l  你所要插入的数值与它所对应的字段必须具有相同的数据类型 



    l  数据的长度必须小于字段的长度  例如             你不能向一个长 40  个字符的字段中插入 



       一个长 80 个字符的字符串 



    l  插入的数值列表必须与字段的列表相对应               也就是说第一个数值在第一个字段 



       第二个数值在第二个字段 



例 8。1: 



   假定你有一个 COLLECTION      的表中存储着你所收集的材料  你可以用下边的语句来 



查看其中的内容 



   INPUT 



   SQL》 SELECT * FROM COLLECTION 



   OUTPUT 



      ITEM                   WORTH   REMARKS 



      NBA ALL STAR CARDS     300     SOME STILL IN BIKE SPOKES 



      MALIBU BARBIE          150     TAN NEEDS WORK 



      STAR WARS GLASS        5。5     HANDLE CHIPPED 



      LOCK OF SPOUSES HAIR   1       HASN'T NOTICED BALD SPOT YET 



   如果你想向表中加入一个新记录  你可以像这样写 



                                                                  159 


…………………………………………………………Page 160……………………………………………………………

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



    INPUTOUTPUT 



    SQL》 INSERT INTO COLLECTION (ITEM; WORTH; REMARKS) 



        VALUES('SUPERMANS CAPE'; 250。00; 'TUGGED ON IT') 



    1 row created。 



    你可以用一个简单的 SELECT 语句来验证插入的结果 



    INPUT/OUTPUT 



    SQL》SELECT * FROM COLLECTION 



    ITEM                      WORTH    REMARKS 



    NBA ALL STAR CARDS        300       SOME STILL IN BIKE SPOKES 



    MALIBU BARBIE             150      TAN NEEDS WORK 



    STAR WARS GLASS           5。5      HANDLE CHIPPED 



    LOCK OF SPOUSES HAIR      1        HASN'T NOTICED BALD SPOT YET 



    SUPERMANS CAPE            250      TUGGED ON IT 



分析 



    INSERT 语句并不需要列的名字            如果列的名字没有给出           SQL  会把数据添入对应的 



列号中     也就是说     SQL  会把第一个值插入到第一列中              把第二个值插入到第二列中             依 



此类推 



例 8。2 



    下边的语句将会像例 8。1 中的表中插入数值 



    INPUT 



    SQL》INSERT INTO COLLECTION VALUES 



    2   ('STRING';1000。00;'SOME DAY IT WILL BE VALUABLE'); 



        1 row created 



分析 



    为了表明它与例 8。1 的效果是相同的  你可以用下边的例子来对其进行验证 



    INPUT 



    SQL》 SELECT * FROM COLLECTION; 



    OUTPUT 



ITEM                      WORTH        REMARKS 



NBA ALL STAR CARDS        300          SOME STILL IN BIKE SPOKES 



MALIBU BARBIE             150          TAN NEEDS WORK 



                                                                          160 


…………………………………………………………Page 161……………………………………………………………

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



ITEM                     WORTH       REMARKS 



STAR WARS GLASS          5。5         HANDLE CHIPPED 



LOCK OF SPOUSES HAIR     1           HASN'T NOTICED BALD SPOT YET 



SUPERMANS CAPE           250         TUGGED ON IT 



STRING                   1000        SOME DAY IT WILL BE VALUABLE 



插入空值 



    在第几天的      建立和操作表      中你将会学到如何使用 SQL  的 CREATE  TABLE 语句来 



创建一个表      现在你需要知道的是当一个列被创建以后                 它可能一定的规则限制  其中之 



一就是它应该  或不应该  包含空值的存在                空值的意思就是该处数值为空             但不是零 — 



— 这属于整数范畴       或是空格 — — 这属于字符串范畴           而是说在空值处根本就没有数据存 



在   如果列被定义为 NOT  NULL       这时列中不允许有空值存在             则当你使用 INSERT     语 



句时必须在此列插入一个数值            如果你违反了这个规则  那么你将收到一个错误的信息 



警告  你可以在对应的空值列            规则上不允许为空值         插入空格     它不会被看为空值         而 



     且看起来该处并没有数据 



    INPUT 



    SQL》 insert into collection values 



        2    ('SPORES  MILDEW  FUNGUS';  50。00;  '  '); 



    OUTPUT 



     1 row inserted。 



分析 



    在使用空格来代替空值以后           你可以在选择语句中使用空格 



    INPUT/OUTPUT 



    SQL》 select * from collection 



      2  where remarks = ' '; 



            ITEM                     WORTH     REMARKS 



            SPORES MILDEW FUNGUS     50。00 



分析 



    返回的结果就好像在那里有一个空值一样                 只从输出上区别这里是空格还是空值是不 



太可能的 



                                                                     161 


…………………………………………………………Page 162……………………………………………………………

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



如果 REMARKS 列被定义为不允许空值  那么当输入下边的语句 



INPUT/OUTPUT 



SQL》 INSERT INTO COLLECTION 



    2    VALUES('SPORES  MILDEW  FUNGUS';50。00;NULL); 



你将会得到一个错误信息 



INSERT INTO COLLECTION 



                        * 



ERROR at line 1: 



ORA…01400: mandatory (NOT NULL) column is missing or NULL during insert 



注  请注意语法        数字和空值不需要引号  而字符型数据则需要引号 



插入唯一值 



    在许多数据库管理系统中都允许你建立一个具有唯一值属性的列  这个属性的意思就 



是在当前的表中当前列的内容不得出现重复                      这个属性在当向一个已有的表中插入或更新 



数据时可能会导致问题的产生                见下例 



    INPUT 



    SQL》 INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING'); 



    OUTPUT 



    INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING') 



                            * 



    ERROR at line 1: 



    ORA…00001: unique constraint (PERKINS。UNQ_COLLECTION_ITEM) violated 



分析 



    在本例中你试图在 COLLECTION  表的 ITEM  列中插入另外一个叫 STRING  的项目 



由于ITEM 列已经被定义为一个唯一的值  所以返回了一个错误结果  对于这个问题 ANSI 



SQL 没有提供解决方法  但许多商业化的解释器会对此进行扩充                             如下例 



    IF NOT EXISTS (SELECT * FROM COLLECTION WHERE NAME = 'STRING' 



    INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING') 



这一例子在 Sybase  系统中是支持的 



                                                                              162 


…………………………………………………………Page 163……………………………………………………………

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



    一个正当的     标准化的表中应该有一个唯一值列或关键字列                 这一字段在归并表格的 



时候非常有用  如果你使用索引的话它也可以大副度地提高你查询的速度                        见第 10 天  创 



建视图和索引 



注   下边的这个插入语句将会向表中插入一个新的雇员 



    SQL》 insert into employee_tbl values 



                                         ('300500177';  'SMITHH';  'JOHN') 



   在按下回车键以后        你发现你把 SMITH 拼错了       别担心  你可以使用 ROLLBACK 命 



令来回溯操作      而数据则并不会被插入         关于 ROLLBACK  语句的详细使用方法请参见第 



11 天的  事务处理控制 



INSERT SELECT 语句 



   INSERT  VALUE  语句在向表中插入几个数据的时候非常有用  但显然这是不够的                    如 



果你想向表中插入 25;000  行数据时怎么办  在这种情况下 INSERT  SELECT  语句就非常有 



效  它允许程序员拷贝一个或一组表的信息到另外一个表中                     你可以在下边这几种情况下 



使用该语句      需要查询的表经常产生利润的增加             需要查询的表可以从多个数据库或表中 



获得外部数据       由于多个表的查询要比单一表的查询速度慢得多                 因此对单个表的查询速 



度要远远高于复杂而缓慢的多个表查询              在服务器/客户机系统上需要查询的表的数据经常 



存储在客户机上以减少网络中的数据传输速度 



    见下例 



   INPUT 



    SQL》 insert into tmp_tbl 



       2    select  *  from  table; 



   OUTPUT 



    19;999 rows inserted。 



分析 



    你可以将所有的数据都插入到一个临时表中 



注   并不是所有的数据库管理系统都支持临时表  请检查你的数据库系统的文档  看看它 



是否支持临时表  在第 14 天中你将会知道对于它的更详细的内容 



INSERT SELECT 语句的语法格式如下 



                                                                  163 


…………………………………………………………Page 164……………………………………………………………

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



语法 



    INSERT INTO table_name (col1; col2。。。) 



    SELECT col1; col2。。。 FROM tablename    WHERE  search_condition 



    本质上来说它是将一个 SELECT 语句的输出结果在输入到另一个表格中去 在 INSERT 



VALUE 中的规则也适用于 INSERT  SELECT 语句                 如果想把表 COLLECTION  中的内容复 



制到另一个叫 INVENTORY 的表中去  你可以使用例 8。3 中的语句 



例 8。3 



本例将创建一个叫 INVENTORY 的表 



    INPUT 



    SQL》 CREATE TABLE INVENTORY 



        2    (ITEM  CHAR(20); 



        3    COST  NUMBER; 



        4    ROOM  CHAR(20); 



        5    REMARKS  CHAR(40)); 



    OUTPUT 



         Table created。 



下边的语句将向表中插入 COLLECTION 表中的数据 



    INPUT/OUTPUT 



    SQL》 INSERT INTO INVENTORY (ITEM; COST; REMARKS) 



        2    SELECT  ITEM;  WORTH;  REMARKS 



        3    FROM  COLLECTION; 



         6 rows created。 



    你可以使用 SELECT 语句来检验 INSERT  的结果 



    INPUT/OUTPUT 



    SQL》 SELECT * FROM INVENTORY; 



ITEM                         COSTROOM       REMARKS 



NBA ALL STAR CARDS           300            SOME STILL IN BIKE SPOKES 



MALIBU BARBIE                 150           TAN NEEDS WORK 



STAR WARS GLASS              5。5            HANDLE CHIPPED 



LOCK OF SPOUSES HAIR          1             HASN'T NOTICED BALD SPOT YET 



SUPERMANS CAPE               250            TUGGED ON IT 



                                                                                   164 


…………………………………………………………Page 165……………………………………………………………

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



ITEM                   COSTROOM    REMARKS 



STRING                 1000        SOME DAY IT WILL BE VALUABLE 



注  数据已经出现在表中了          可是在你使用 MIT      语句之前它并不会真正生效          事务 



   处理工作可以由 MIT  确认或只是简单地放弃             关于 MIT   的详细内容可见第 



   11 天 



分析 



   你已经成功了       虽然有些费力       但是你已经将 COLLECTION       中的数据复制到了 



INVERTORY 表中 



   INSERT SELECT 语句要求你遵循如下规则 



       l  SELECT 语句不能从被插入数据的表中选择行 



       l  INSERT INTO  中的列数必须与SELECT 语句返回的列数相等 



       l  INSERT INTO 中的数据类型要与 SELECT 语句返回的数据类型相同 



   INSERT  SELECT 语句的另外一个用处是当你需要对表进行重新定义时对表进行备份 



这时需要你通过选择原始表中的所有数据并将其插入到一个临时表中来完成  例如 



     SQL》 insert into copy_table 



             2    select  *  from  original_table; 



   然后你就可以放心地对原始表进行变更了 



注  在今天的晚些时候你将会学习如何向一个表中导入其它数据库中的数据                         几乎每一种 



   商用的数据库都有它们自己的数据存储格式  编程人员经常需要对其进行格式转换 



   你将学习有关这方法的通用方法 



UPDATE 语句 



   该语句的作用是将已存在的记录的内容改变  语法格式如下 



   SYNTAX 



       UPDATE table_name  SET columnname1 = value1 '; columname2 = value2'。。。 



       WHERE search_condition 



   UPDATE 语句首先要检查 WHERE 子句  对于符合 WHERE 子句条件的记录将会用给 



定的数据进行更新 



                                                                  165 


…………………………………………………………Page 166……………………………………………………………

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



例 8。4 



    INPUT 



    SQL》 UPDATE COLLECTION SET WORTH = 900 WHERE ITEM = 'STRING'; 



    OUTPUT 



    1 row updated。 



下边的查询可以用来验证确实已经进行了更新操作 



    INPUT/OUTPUT 



    SQL》 SELECT * FROM COLLECTION WHERE ITEM = 'STRING' 



          ITEM       WORTH     REMARKS 



          STRING     900       SOME DAY IT WILL BE VALUABLE 



下边是一个对多个记录进行更新的例子 



    INPUT/OUTPUT 



    SQL》 update collection set worth = 900; item = ball where item = 'STRING'; 



    1 row updated。 



   注   你所使用的解释器的对多个记录进行更新的语法可能会与这里给出的并不相同 



   注   注意在 900    上没有加引号        因为它是数值类型  而在 STRING  上则有引号                 因 



       为它是字符串 



例 8。5 



    如果在 UPDATE 语句中省略了 WHERE 子句  那么给定表中的所有记录都会被更新 



    INPUT/OUTPUT 



    SQL》 UPDATE COLLECTION SET WORTH = 555; 



    6 rows updated。 



下边的 SELECT 查询表明了表中的所有记录都已经被更新了 



    INPUT/OUTPUT 



    SQL》 SELECT * FROM COLLECTION 



    ITEM                       WORTH     REMARKS 



    NBA ALL STAR CARDS         555       SOME STILL IN BIKE SPOKES 



    MALIBU BARBIE              555       TAN NEEDS WORK 



    STAR WARS GLASS            555       HANDLE CHIPPED 



                                                                            166 


…………………………………………………………Page 167……………………………………………………………

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



    ITEM                    WORTH    REMARKS 



    LOCK OF SPOUSES HAIR    555      HASN'T NOTICED BALD SPOT YET 



    SUPERMANS CAPE          555      TUGGED ON IT 



    STRING                  555      SOME DAY IT WILL BE VALUABLE 



当然你也应该检查一下它是否也对具有唯一值属性的列进行了更新操作 



警告   如果你在 UPDATE 语句中没有使用 WHERE  子句  那么所有给定表中的记录都会被 



     更新 



    一些数据库管理系统对标准的UPDATE 语句进行了扩展 SQL SERVER 的Transact…SQL 



就是它们中的一个例子  它允许使用 FROM  子句实现对给定表的记录用其它表中的数据来 



进行更新操作       其语法表达如下 



SYNTAX 



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