S1/C#语言和数据库技术基础/08-用SQL语句操作数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S1/C#语言和数据库技术基础/08-用SQL语句操作数据相关的知识,希望对你有一定的参考价值。
SQL语言主要由以下几部分组成:
DML(Data Manipulation Language,数据操作语言,也称为数据操纵语言):用来插入、修改和删除数据库中的数据,如INSERT、UPDATE及DELETE等。
DDL(Data Definition Language,数据定义语言):用来建立数据库、数据库对象和定义其列,大部分是以CREATE开头的命令,如CREATE TABLE,CREATE VIEW及DROP TABLE等。
DQL(Data Query Language,数据查询语言):用来对数据库中的数据进行查询,如SELECT等。
DCL(Data Control Language,数据控制语言):用来控制数据库组件的存取许可、存储权限等,如GRANT、REVOKE等。
除此之外,T-SQL还包括变量说明、内部函数等其他的命令。
使用T-SQL插入数据
1、使用INSERT插入数据
语法:INSERT [INTO] 表名 [(列名列表)] VALUES (值列表);
其中:
1、[INTO]是可选的,也可以省略。
2、表名是必需的。
3、表的列名是可选的,如果省略,将依次插入所有列。
4、多个列名和多个值列表用逗号分隔。
5、分号(;)是T-SQL语句终止符,分号不是必需的。
例如,以下的语句为向学生表中插入一行数据。
INSERT INTO Students(Sname,Saddress,Sgrade,Semail,SSex)
VALUES(‘张青裁‘,‘上海松江‘,6,‘[email protected]‘,0)
注意:SQLServer中,默认T-SQL是不区分大小写的,本书所有的T-SQL关键字均采用了大写方式,以突出表现。
再插入数据的时候,需要注意以下事项。
- 每次插入一整行数据,不可能只插入半行或者几列数据,但允许某些列为空或使用默认值。
- 数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。
- INSERT语句不能为标识列指定值,因为它的数字是自动增长的。
- 对于字符类型、日期类型的列,当插入数据的时候,用单引号(‘)将其引起来。
- 尽管可以不指定列名,但是最好明确指定插入的列和对应的值,以便能够将列和值清晰的对应起来。
- 若在设计表的时候指定某列不允许为空,则该列必须插入数据,否则将报告错误信息。
- 插入的数据项,要求符合检查约束的要求,例如,我们在前面设置了Semail列必须包含一个字符@,如果插入语句修改为
INSERT INTO Students(SName,SAddress,SGrade,Semail,SSex)
VALUES(‘张青裁‘,‘上海松江‘,6,‘ZQC‘,0)
执行该语句后,将提示与表的约束相冲突,插入失败。
- 如果指定了列明,如何为具有默认值的列插入数据?例如,以上学生信息表中的地址信息十句有默认值的。这个时候可以使用DEFAULT(默认)关键字来代替插入的数值,插入如下语句。
INSERT INTO Students(SName,SAddress,SGrade,SEmail,SSex)
VALUES(‘张青裁‘,DEFAULT,6,‘[email protected]‘,0)
2、一次插入多行数据
一次插入多行数据有三种方法,下面分别讲解。
1/通过INSERT SELECT语句向表中添加数据
例如,创建一张新表AddressList来存储本班的通讯录信息,则可以从学生表中提取相关的数据插入建好的AddressList表中,T-SQL语句如下。
INSERT INTO AddressList(姓名,地址,电子邮件)
SELECT Sname,Saddress,Semail
FROM Students
SELECT语句用于查询,上面的SQL语句用来把学生信息表中的姓名、地址和E-mail信息读取并保存到新的AddressList表中。
需要注意以下两点。
- 查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致。
- AddressList表必须预先创建好,并且具有姓名、地址和电子邮件三个列。
2/通过SELECT INTO语句将现有表中的数据添加到新表中
与上面的INSERT INTO类似,SELECT INTO语句也是从一个表中选择一些数据插入新表中,所不同的是,这个新表是执行查询语句的时候创建的,不能够预先存在。
例如,以下的T-SQL语句:
SELECT Students.SName,Students.SAddress,Students.SEmail
INTO AddressList
FROM Students
将创建新表AddressList,吧Students表中的Sname、Saddress、Semail作为AddressList表的新列,并且把查询到的数据全部插入新表中。
在向一个新表插入数据的时候,又会牵涉到一个新的问题:如何插入标识列?
因为标识列的数据是不允许指定的,因此我们可以创建一个新的标识列,语法如下。
语法:
SELECT IDENTITY(数据类型、标识种子、标识增长量) AS 列名
INTO 新表
FROM 原始表
上面的语句不会复制关系与check约束,也可以修改为
SELECT Students.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1) AS
StudentID
INTO AddressList
FROM Students
上句的用法同SELECT INTO新建表一样。
3/通过UNION关键字合并数据进行插入
UNION语句用于将两个不同的数据或查询结果合成一个新的结果集。
当然,不同的数据或查询结果,也要求数据个数、顺序、数据类型都一致,因此,当向表中多次插入数据的时候,可以使用SELECT…UNION来简化操作。
例如,以下的T-SQL语句:
INSERT Students(SName,SGrade,SSex)
SELECT ‘张可‘,7,1 UNION
SELECT ‘李扬‘,4,0 UNION
SELECT ‘杨晓‘,2,0 UNION
SELECT ‘汤美‘,3,0 UNION
SELECT ‘苏三东‘,7,1 UNION
SELECT ‘王立岩‘,3,1 UNION
SELECT ‘张伟‘,7,1 UNION
SELECT ‘陈刚‘,4,1 UNION
SELECT ‘王娟娟‘,7,0;
这样的实际效果其实与上面INSERT…SELECT的效果是一样的,只不过多行数据是手写的,然后用UNION合并组成多行数据记录,最后把这些多行数据记录一起插入。此方法无法实现(默认值),DEFAULT,‘‘输入,日期也用‘‘字符方式。
使用T-SQL更新数据
使用T-SQL更新表中某行的语法格式如下。
语法:
UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]
其中:
- SET后面可以紧跟多个“列名=更新值”,修改多个数据列的值,不限一个,使用逗号分隔。
- WHERE子句是可选的,用来限制更新数据的条件。若不限制,则整个表的所有数据行将被更新。
需要注意的是,使用UPDATE语句,可能更新一行数据,也可能更新多行数据,但也可能不会更新任何数据。
例如,在学生信息表中,要把所有学生的性别都改为0(女生)。
UPDATE Students SET Ssex=0
对于地址为“北京女子职业技术学校刺绣班”的学生,若这个班级改为家政班了,则需要按照条件进行更新。
UPDATE Students
SET SAddress=‘北京女子职业技术学校刺绣班‘
WHERE SAddress=‘北京女子职业技术学校刺绣班‘
前面已经提到,在T-SQL表达式中,可以使用列名和数值。如果学生在考试时,有一道题目的标准答案错了,导致评分失误,事后需要在成绩表中更新成绩,所有低于或等于95分的成绩都在原来的基础上加5分,更新的SQL语句如下。
UPDATE Score
SET Score = Score + 5
WHERE Score <= 95
提示:在更新数据的时候,一般都有条件限制,别忘了书写WHERE条件语句,否则将更新表中所有行的数据,这就可能导致有效数据的丢失。
使用DELETE删除数据
使用T-SQL删除表中的数据,语法如下所示。
语法:
DELETE [FROM] 表名 [WHERE <删除条件>]
在学生信息表中删除姓名为“张青裁”的数据的SQL语句如下。
DELETE FROM Students
WHERE SName = ‘张青裁‘
还有一种情况,如果要删除的行的主键值被其他表引用,例如,分数表中的StudentID引用了学生信息表中的SCode列,那么删除被引用的行时:
DELETE FROM Students
WHERE SCode = 22
SQL Server将报告与约束冲突的错误信息
提示:DELETE语句删除的是整条记录,不会只删除单个列,所以在DELETE后不能出现列名,例如,以下语句:
DELETE SAddress FROM Students
将报告错误信息。
使用TRUNCATE TABLE删除数据
TRUNCATE TABLE用来删除表中的所有行,功能上它类似于没有WHERE子句的DELETE语句。
例如,要删除学生信息表中的所有记录行,可以使用以下语句。
TRUNCATE TABLE Students
但TRUNCATE TABLE 比DELETE执行速度快,使用的系统资源和事务日志资源更少,并且删除数据后表的标识列会重新开始编号。
TRUNCATE TABLE删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。TRUNCATE TABLE不能用于有外键约束引用的表,这种情况下,需要使用DELETE语句。
实际工作中,不建议使用TRUNCATE TABLE语句,因为使用他删除的数据不能恢复还原。
以上是关于S1/C#语言和数据库技术基础/08-用SQL语句操作数据的主要内容,如果未能解决你的问题,请参考以下文章