3.2.1 使用INSERT语句插入表数据

Download Report

Transcript 3.2.1 使用INSERT语句插入表数据

第3章 表数据操作
3.1 界面操作表数据
3.2 命令操作表数据
3.1 界面操作表数据
首先要启动SQL Server,然后启动“企业管理器”,建立与SQL Server的连接,展开需进
行操作的表所在的数据库、展开表。在需操作的表上点击鼠标右键,在弹出的快捷菜单中选
择“打开表”“返回所有行”,如图3.1所示。
图3.1 打开表
3.1 界面操作表数据
在选择了“打开表”“返回所有行”后,将进入操作所选择的表数据窗口。在此窗
口中,表中的记录按行显示,每个记录占一行。在此界面中,可向表中插入记录、也可删
除和修改记录,如图3.2所示。
图3.2 操作表数据窗口
3.1.1 插入记录
插入记录将新记录添加在表尾,可以向表中插入多条记录。操作方法是:将光标定位到
当前表尾的下一行,然后逐列输入列的值。每输入完一列的值,按回车键,光标将自动
跳到下一列,便可编辑该列。若当前列是表的最后一列,则该列编辑完后按下回车键,
光标将自动跳到下一行的第一列,此时便可增加下一行。
如图3.3所示,继续向XS表中增加10条记录。
图3.3 向表XS中添加记录
3.1.2 删除记录
当表中的某些记录不再需要时,要将其删除。在企业管理器中删除记录的方法是:
第1步 在操作表数据的窗口中定位需被删除的记录行,即将当前光标(窗口的第一
列位置)移到要被删除的行,此时该行反相显示,点击鼠标右键,在弹出的快捷菜单上
选择“删除”功能项。
第2步 选择“删除”后,将出现确认对话框,点击“是”按钮将删除所选择的记录,
点击“否”按钮将不删除该记录。
3.1.3 修改记录
在企业管理器中修改记录数据的方法是,先定位被修改的记录字段,然后对该字段
值进行修改。例如,将XS表的第2条记录的“总学分”字段的值改为40,如图3.4所示。
图3.4 修改记录数据
3.1.4 界面操作表数据的另一种方法
通过企业管理器操作表数据还有另一种方法:
第1步 启动“企业管理器”,建立与SQL Server的连接,展开需进行操作的表所在的
数据库、展开表。在需操作的表上点击鼠标右键,在弹出的快捷菜单中选择“打开
表”“查询”,如图3.5所示。
图3.5 选择“查询”
3.1.4 界面操作表数据的另一种方法
第2步 在所出现的如图3.6所示的界面中点击“运行”按钮,在窗口的最下面的结果集
显示窗口中将显示表的所有行,可以插入、删除和修改记录,操作的方法与在Enterprise中
进行相应操作的方法相同。
图3.6 “企业管理器”的查询界面
3.2.1 使用INSERT语句插入表数据
语法格式:
INSERT [INTO]
{ table_name
/*表名*/
WITH (<table_hint_limited>[…n])
/*指定表提示,可省略*/
| view_name
/*视图名*/
| rowset_function_limited /*可以是OPENQUERY 或 OPENROWSET 函数*/
}
{ [ (column_list)]
/*列表*/
{ VALUES
/*指定列值的子句*/
({DEFAULT | NULL |expression} [,…n])
/*列值的构成形式*/
| derived_table
/*结果集*/
| exectute_statement
/*有效的EXECTUTE语句*/
}
}
| DEFAULT VALUES
/*所有列均取默认值*/
3.2.1 使用INSERT语句插入表数据
说明:
table_name:被操作的表名,如XS。
view_name:视图名。该视图必须是可以更新的。
column_list:列表。包含了新插入数据行的各列的名称。如果只给表的部分列插入数
据时,需要用column_list指出这些列。例如,当加入到表中的记录的某些列为空值或为缺
省值时,可以在INSERT语句中给出列表的省略这些列。没有在column_list中指出的列,它
们的值根据默认值或列属性来确定,原则是:
(1) 具有IDENTITY属性的列,其值由系统根据seed和increment值自动计算得到;
(2) 具有默认值的列,其值为默认值;
(3) 没有默认值的列,若允许为空值,则其值为空值;若不允许为空值,则出错;
(4) 类型为timestamp的列,系统自动赋值。
若INSERT语句中未给出列表部分,则在VALUES子句中要给出每一列(除IDENTITY
和timestamp类型的列)的值,如果列值为空,则值必须置为NULL。在对表进行插入行时,
若新插入的行中所有可取空值的列值均取空值,则就可以在INSERT语句中列出需要插入行
值的列,而在VALUES中只要给出这些列的值即可。
3.2.1 使用INSERT语句插入表数据
VALUES子句: 为column_list列表中的各列指定值。若省略colume_list,则VALUES
子句给出每一列(除IDENTITY和timestamp类型以外的列)的值。VALUES子句中的值
可有三种:
(1) DEFAULT:指定为该列的默认值。这要求定义表时必须指定该列的默认值。
(2) NULL:指定该列为空值。
(3) expression:可以是一个常量、变量或一个表达式,其值的数据类型要与列的数
据类型一致。注意表达式中不能有SELECT及EXECUTE语句。
从INSERT的语法格式可以看到,使用INSERT语句可以向表中插入一行数据,也可
以插入多行数据,插入的行可以给出每列的值,也可只给出部分列的值,还可以向表中
插入其他表的数据。
derived_table: 是一个由SELECT语句查询所得到的结果集。利用该参数,可把一个
表中的部分数据插入到另一个表中。使用该参数时,INSERT语句将derived_table结果集
加入指定表中。但结果集中每行数据的字段数、字段的数据类型要与被操作的表完全一
致。
DEFAULT VALUES: 该关键字说明向当前表中所有列均插入其默认值。此时,要求
所有列均定义了默认值。
【例3.1】向XSCJ数据库的表XS中插入如下的一行:
081112 罗林琳 计算机 0 1/30/1990 40
可以使用如下的T-SQL语句:
USE XSCJ
INSERT INTO XS
VALUES(‘081112’,’罗林琳’,’计算机’, 0 ,‘1/30/1990’, 40,Null,Null)
GO
3.2.1 使用INSERT语句插入表数据
该语句执行的结果如图3.7所示。
图3.7 向表中插入一行
3.2.1 使用INSERT语句插入表数据
用SELECT语句进行查询,可以发现表中已经增加了学号为“081112”这一行,如图
3.8所示。
图3.8 插入数据以后的表
3.2.1 使用INSERT语句插入表数据
【例3.2】 用如下的CREATE语句建立表XS1:
CREATE TABLE XS1
(
num char(6) NOT NULL,
name char(8) NOT NULL,
speiality char(10) NULL
)
用如下的INSERT语句向XS1表中插入数据:
INSERT INTO XS1
SELECT 学号,姓名,专业名
FROM XS
WHERE 专业名=’计算机’
上面这条INSERT语句的功能是:将XS表中专业名为‘计算机’的各记录的学号、
姓名和专业名列的值插入到XS1表的各行中。用如下的SELECT语句进行查询看插入结
果:
SELECT *
FROM XS1
3.2.1 使用INSERT语句插入表数据
结果如图3.9所示。
图3.9 插入表XS1的记录
3.2.1 使用INSERT语句插入表数据
在执行INSERT语句时,如果插入的数据与约束或规则的要求产生冲突或值的数据类型
与列的数据类型不匹配,那么INSERT执行失败。
另外,使用INSERT向KC表输入的样本数据记录后,如图3.10所示。
图3.10向KC表输入样本数据记录
3.2.1 使用INSERT语句插入表数据
使用INSERT向XS_KC表输入的数据样本记录后,如图3.11所示。
图3.11向XS_KC表输入数据样本记录
3.2.2 使用DELETE或TRANCATE语句删除数据
在T-SQL语言中,删除数据可以使用DELETE语句或TRANCATE TABLE语句来实现。
1.使用DELETE语句删除数据
语法格式:
DELETE
[FROM]
{ table_name WITH ( < table_hint_limited > [ ...n ] ) /*从表中删除数据*/
| view_name
/*从视图删除数据*/
| rowset_function_limited
/*可以是OPENQUERY或OPENROWSET 函
数*/
}
[ FROM {<table_source>}[,…n]]
/*从table_source删除数据*/
[ WHERE {<search_condition>
/*指定条件*/
|{ [CURRENT OF { {[GLOBAL] cursor_name} | cursor_variable_name}]}
/*有关游标的说明*/
}]
[OPTION(<query_hint>[,…n])]
/*使用优化程序*/
3.2.2 使用DELETE或TRANCATE语句删除数据
说明:
FROM子句: 用于说明从何处删除数据。可以从四种类型的对象中删除数据:
表:由table_name指定要从其中删除数据的表名,关键字WITH指定目标表所允许的一个
或多个表提示。
视图:由view_name指定要从其中删除数据的视图名,要注意该视图必须可以更新,
并且正确引用了一个基本表。
OPENQUERY和OPENROWSET函数:由rowset_function_limited指定。
table_source:将在介绍SELECT语句时详细讨论。
WHERE子句:WHERE子句为删除操作指定条件,<search_condition>给出了条件,其
格式在介绍SELECT语句时详细讨论。若省略WHERE子句,则DELETE将删除所有数
据。关键字CURRENT OF用于说明在指定游标的当前位置完成删除操作;关键字
GLOBAL用于说明<cursor_name>指定的游标是全局游标。<cursor_variable_name>是游
标变量的名称,游标变量必须引用允许更新的游标。
【例3.3】将XSCJ数据库的XS表中总学分小于39的行删除,使用如下的T-SQL语句:
USE XSCJ
DELETE FROM XS
WHERE 总学分<39
GO
3.2.2 使用DELETE或TRANCATE语句删除数据
该语句执行的结果如图3.12所示。
图3.12从表XS中删除数据
3.2.2 使用DELETE或TRANCATE语句删除数据
用SELECT语句进行查询,可以发现表中学号为“081102”和“081105”两行已被删除,
如图3.13所示。
图3.13删除数据以后的表XS
3.2.2 使用DELETE或TRANCATE语句删除数据
【例3.4】将XSCJ数据库的XS表中备注为空的行删除(实际不做操作)。
DELETE FROM XS
WHERE 备注 IS NULL
将XSCJ数据库的XS表中的所有行均删除(实际不做操作)。
DELETE XS
2. 使用TRUNCATE TABLE语句删除表数据
使用TRUNCATE TABLE语句将删除指定表中的所有数据,因此也称其为清除表数据
语句。
语法格式:
TRUNCATE TABLE name
说明:
name为所要删除数据的表名。由于TRUNCATE TABLE语句将删除表中的所有数据,
且无法恢复,因此使用时必须十分当心。
使用TRUNCATE TABLE 删除了指定表中的所有行,但表的结构及其列、约束、索引
等保持不变,而新行标识所用的计数值重置为该列的初始值。如果想保留标识计数值,则
要使用DELETE语句。
3.2.2 使用DELETE或TRANCATE语句删除数据
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同,二者均
删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务
日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
而TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日
志中记录页的释放。
对于由外键(FOREIGN KEY)约束引用的表,不能使用 TRUNCATE TABLE删除
数据,而应使用不带 WHERE 子句的 DELETE 语句。另外TRUNCATE TABLE也不能用
于参与了索引视图的表。
例如,语句TRUNCATE TABLE XS将删除表XS中的所有行。
3.2.3 使用UPDATE语句修改数据
在T-SQL中,UPDATE语句可以用来修改表中的数据行。
语法格式:
UPDATE
{ table_name WITH ( < table_hint_limited > [ ...n ] )
/*修改表数据*/
| view_name
/*修改视图数据*/
| rowset_function_limited
/*可以是OPENQUERY或OPENROWSET函数*/
}
SET
/*赋予新值*/
{ column_name = { expression | DEFAULT | NULL }
/*为列重新指定值*/
| @variable = expression
/*指定变量的新值*/
| @variable = column = expression
/*指定列和变量的新值*/
}[,…n]
{ { [ FROM {<table_source>}[,…n]]
/*修改table_source数据,见SELECT语句*/
[ WHERE <search_condition> ]
/*指定条件*/
}
| [ WHERE CURRENT OF
/*有关游标的说明*/
{ {[GLOBAL] cursor_name} | cursor_variable_name}]
}
[OPTION(<query_hint>[,…n])]
/*使用优化程序*/
3.2.3 使用UPDATE语句修改数据
说明:
可以对四种类型的对象修改数据:
(1) 表:由table_name指定要从其中删除数据的表名,关键字WITH指定目标表所允许的
一个或多个表提示。
(2) 视图:由view_name指定要从其中删除数据的视图名,要注意该视图必须可以更新,
并且正确引用了一个基本表。
(3) OPENQUERY和OPENROWSET函数:由rowset_function_limited指定。
(4) table_source:将在介绍SELECT语句时详细讨论。
SET子句:用于指定要修改的列或变量名及其新值。共有3种可能情况:
(1) column_name = { expression | DEFAULT | NULL } 将指定的列值改变为所指定的值。
expression为表达式,DEFAULT为缺省值,NULL为空值。要注意指定的新列值的合法性。
(2) @variable = expression 将变量的值改变为表达式的值。@ variable为已声明的变量,
expression为表达式。
(3) @variable = column = expression 将变量和列的值改变为表达式的值。@ variable为已
声明 的变量,column为列名,expression为表达式。
FROM子句和WHERE子句: 指定用表来为更新操作提供数据。WHERE子句中的
<search_condition>指明只对满足该条件的行进行修改,若省略该子句,则对表中的所有行进
行修改。
3.2.3 使用UPDATE语句修改数据
【例3.5】将XSCJ数据库的XS表中学号为081110的学生的备注列值改为“三好生”。
USE XSCJ
UPDATE XS
SET 备注=’三好生’
WHERE 学号=’081110’
GO
用SELECT语句进行查询,可以发现表中学号为“081110”的行的备注字段值已被修改,
如图3.14所示。
图3.14修改数据以后的表
3.2.3 使用UPDATE语句修改数据
【例3.6】将XS表中的所有学生的总学分都增加10。将姓名为“罗林琳”的同学的专业改
为“通信工程”,备注改为“转专业学习”,学号改为081241。
UPDATE XS
SET 总学分 = 总学分+10
GO
UPDATE XS
SET 专业名 = ‘通信工程’,
备注 = ‘转专业学习’,
学号 = ‘081241’
WHERE 姓名 = ‘罗林琳’
GO
说明:若UPDATE语句中未使用WHERE子句限定范围,UPDATE语句将更新表中的所
有行。使用UPDATE可以一次更新多列的值,这样可以提高效率。
上面所举的操作表数据的例子都是在查询分析器中执行的,除了可以在查询分析器中执
行T-SQL的操作表数据的语句外,在企业管理器中也可以执行这样的语句,其界面可见图3.8。
例如,对XS表进行修改,将姓名为“李明”的学生的总学分加4,备注改为“提前修完《数
据结构》,并获得学分”。下面的T-SQL语句将完成此更新:
UPDATE XS
SET 总学分 = 总学分 + 4, 备注 = ‘提前修完《数据结构》,并获得学分’
WHERE 姓名=’ 李明’
3.2.3 使用UPDATE语句修改数据
企业管理器操作如图3.15所示。
图3.15 在“企业管理器”中执行T-SQL语句
习 题
1. 在SQL Server 2000企业管理器与使用T-SQL修改数据,两种方法相比较,哪一种
功能更强大、更为灵活?试举例说明。
2. 通过企业管理器,向学生成绩(XSCJ)数据库的表中送入或修改成样本数据(见第一
章)。
3. 通过命令方式,对产品销售数据库(CPXS)进行操作。
(1) 向产品表插入如下记录:
冰箱
2500
100
彩电
2800
50
(自己设计部分数据)
(2) 向销售商表插入记录
(自己设计数据)
(3) 向产品销售表插入记录
(自己设计数据)
(4) 将产品销售数据库的产品表中的每种商品的价格打8折。
(5) 将产品销售数据库的产品表中价格打8折后小于50的商品删除。
0203
0301