友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第33部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
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 table_name SET columnname1 = value1 '; columname2 = value2'。。。
FROM table_list WHERE search_condition
例 8。6
这是一个实例
INPUT
SQL》 UPDATE COLLECTION SET WORTH = WORTH * 0。005
INPUT/OUTPUT
SQL》 SELECT * FROM COLLECTION
ITEM WORTH REMARKS
NBA ALL STAR CARDS 2。775 SOME STILL IN BIKE SPOKES
MALIBU BARBIE 2。775 TAN NEEDS WORK
STAR WARS GLASS 2。775 HANDLE CHIPPED
LOCK OF SPOUSES HAIR 2。775 HASN'T NOTICED BALD SPOT YET
SUPERMANS CAPE 2。775 TUGGED ON IT
STRING 2。775 SOME DAY IT WILL BE VALUABLE
分析
该语法在当给定表需要更新的内容源自于其它多个表的时候非常有用 切记该语法不
是标准语法 在使用它之前请先查看一下你所使用的数据库的文档看一看它是否为你的数
据库系统所支持
UPDATE 语句也可以用一个数学运算式的结果来对给定数据进行更新操作 当使用这
项技术时 必须注意你所使用的表达式结果与需要更新的数据字段为同一种数据类型 而
167
…………………………………………………………Page 168……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
且其长度也要与被更新字段的定义长度相符
当使用计算值时可能会有两个问题产生 截断和溢出 例如当将一个小数转换为整数
时可能会有截断的情况产生 而当计算的结果超过了该字段的定义数据长度时会导致溢出
这会使你的数据库返回一个错误
注 一些数据库系统可以为你处理溢出问题 ORACLE 7 可以在这时将其转成指数形式以
避免错误 但是你要清楚在使用数据类型时这种错误存在的可能性
技巧 如果在你更新列的以后发现了错误 你可以使用 ROLLBACK 语句来取消更新操作
就像你对 INSERT 所做的那样 关于该命令在第 11 天会有更多的介绍
DELETE 语句
与向数据库中加入数据相对应 你可能需要删除数据库中的数据 DELETE 语句的语
法格式如下
SYNTAX
DELETE FROM tablename WHERE condition
对于 DELETE 命令你需要注意的第一件事就是它不会出现确认提示 而用户似乎已经
习惯于确认提示了 举例来说 当我们在操作系统中删除了某个文件或目录时 Are you sure?
(Y/N)经常会在命令执行之前出现 在使用 SQL 时 当你告诉 DBMS 从表中删除一组记录
时 它会执行你的命令而不提问 也就是说 当你用 SQL 的 DELETE 命令删除记录时
它确实已经执行了删除操作
在第 11 天中我们将会学习到事务处理控制 事务控制是一种数据库处理机制 它允许
编程人员确认或撤消对数据库的改变 该操作对于在线事务处理程序中采用批处理方式对
数据库进行改动时非常有效 然而如果同一时间又有其他的用户也在进行数据修改操作时
将会导致引用完整性错误 现在 假设不存在事务处理机制
注 对于一些解释器 例如 ORACLE 当你在即出 SQL 的时候会自动地调用确认操作
通过 DELETE 语句和 WHERE 子句 DELETE 语句可以完成下边的工作
l 删除单一的行
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!