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