一. 创建表结构
USE TEST_427 --使用TEST_427这个数据库,表示对该数据库进行建表操作 GO CREATE TABLE XSB --创建XSB表 ( StudentNo char(6) NOT NULL PRIMARY KEY, --列名 + 类型 + 是否可为空,最后设置主键 StudentName char(8) NOT NULL, StudentSex bit NULL DEFAULT 1, --用default设置默认值,此处设为1 Sbrithday date NULL, StudentSpecialty char(12) NULL, SumCredit int NULL, StudentRemarks varchar(500) NULL --最后不用逗号 )
如果不加上 USE TEST_427,那么默认所创建的表为当前数据库的。
创建一个带计算列的表
--创建一个带计算列的表 USE TEST_427 GO CREATE TABLE TEST_1 ( CourseID char(3) PRIMARY KEY, --由于主键本身不能为空,所以在此可以不加NOT NULL,因为本身就不为空 SumScore real NOT NULL, --real 是浮点型的一种,精度为7位有效数字 SumNumberOfStudent int NOT NULL, AverageScore AS SumScore/SumNumberOfStudent PERSISTED --使用AS字段,还有persisted,表示留存 )
如果没有使用PERSISTED关键字,则在计算列上不能添加 PRIMARY KEY, UNIQUE, DEFAULT等约束条件,由于计算列上的值是通过服务器计算得到的,所以在插入或者修改数据时不能对计算列赋值。
二. 修改表结构
--增加列
--在表中增加新列 USE TEST_427 GO ALTER TABLE XSB --修改表XSB ADD scholarship tinyint NULL --增加奖学金这一列 GO USE TEST_427 GO ALTER TABLE TEST_1 ADD scholarship_1 tinyint NULL,--添加两个列,用逗号隔开即可 scholarship_2 tinyint NULL GO
--删除列
--在表中删除列 USE TEST_427 GO ALTER TABLE XSB DROP COLUMN scholarship --注意添加column表示删除的是列 GO
在写这段代码的时候,容易忘了添加一些关键字,如column
所以我们可以翻译成字面意思来加深记忆和理解,翻译如下:
使用(use)数据库TEST_427(名称)
立即执行(上面的代码)
修改(alter)一个表(table),它的名称叫TEST_1
删除(drop)表中一个列(column),它的名称叫scholarship
立即执行(上面的代码)
小技巧:在敲SQL语句的时候,可以在心里默念这样的中文,一来容易记忆,二来不容易出错漏掉一些关键字
--修改列属性
--修改表中的属性,使用alter --将姓名的列长度改为10,将出生日期的数据类型从data改为datatime USE TEST_427 GO ALTER TABLE XSB ALTER COLUMN StudentName char(10) --使用alter表示更新修改 GO ALTER TABLE XSB ALTER COLUMN Sbirthday datetime GO
--删除表
--删除表 USE TEST_427 GO DROP TABLE XSB --drop删除表
三. 操作表-插入记录
插入记录使用 insert 语句
--操作表数据-插入记录 /* 向数据库TEST_427的表XSB中插入如下一行数据: 123456,天天,1,1994-11-21,软件工程,60,NULL */ USE TEST_427 GO INSERT INTO XSB --不要忘了加上into VALUES('123456','天天',1,'1994-11-21','软件工程',60,NULL) --values 单词后面有s
若表中有默认值,那么在插入表的时候,可以不用对默认值进行赋值操作。
在SQL Server中,可以一次插入多条记录,每条数据之间用逗号可开即可:
INSERT INTO XSB VALUES ('123457','晓晓',1,'1994-11-24','软件工程',60,NULL), --注意此处用逗号隔开 ('123458','明明',1,'1994-11-22','软件工程',60,NULL)
从表XSB中生成计算机专业的学生表,包括学号、姓名、专业,要求新表中的数据结果集中在前4行:
/* 从表XSB中生成计算机专业的学生表,包括学号、姓名、专业,要求新表中的数据结果集中 在前4行。 */ --先创建表 USE TEST_427 GO CREATE TABLE XSB1 ( studentNo char(10) PRIMARY KEY, studentName char(12) NOT NULL, speiality char(10) NULL ) --插入数据 INSERT TOP(4) INTO XSB1 --此处top(4)表示插入的数据为另一个表的前4个数据 SELECT StudentNo,StudentName,StudentSpecialty --按照题目要求,插入的是XSB表中的这几个元素 FROM XSB --用from表示来自哪个表 WHERE StudentSpecialty = '软件工程' --约束条件 GO
上面这条INSERT语句的功能是:将XSB中专业名为“软件工程”的各记录的学号、姓名、专业名列的值插入到表XSB1的各行中。
使用下面的查询语句进行检验查询:
SELECT * FROM XSB1
运行结果:
四. 操作表-删除记录
可以用delete语句或者truncate table语句来实现
举例1:将TEST_427数据库的XSB中总学分大于50的行删除
USE TEST_427 GO DELETE --使用delete删除 FROM XSB --来自这张表 WHERE SumCredit < 50; --条件 GO
举例2:将TEST——427数据库的XSB中备注为空的行删除
DELETE FROM XSB WHERE StudentRemarks IS NULL --注意is GO
使用TRUNCATE TABLE删除表数据,将会删除表中的所有数据,因此也称为清除表数据语句。注意,使用该语句无法恢复,所以使用时要十分小心。
TRUNCATE TABLE XSB --XSB为所要删除的表名
五. 操作表-修改记录
用update语句来修改数据
举例1:将XSB中学号为123450的学生备注为三好学生
--修改数据 USE TEST_427 GO UPDATE XSB SET StudentRemarks = '三好学生' --set表示修改 WHERE StudentNo = '123450' GO
运行结果:
六. 操作表-更新记录
在SQL Server2008中,新增加了一个MERGE语句(megre 中文意思:混合;相融;融入;渐渐消失在某物中),用于根据与源表连接的结果,对目标表进行增删改操作。
可以对两个表进行信息同步。
--使用merge语句 USE TEST_427 GO CREATE TABLE A --创建A表 ( StudentNo char(6) NOT NULL PRIMARY KEY, --列名 + 类型 + 是否可为空,最后设置主键 StudentName char(8) NOT NULL, StudentSex bit NULL DEFAULT 1, --用default设置默认值,此处设为1 Sbrithday date NULL, StudentSpecialty char(12) NULL, SumCredit int NULL, StudentRemarks varchar(500) NULL --最后不用逗号 ) --同步 MERGE INTO A USING XSB ON A.StudentNo = XSB.StudentNo --使用XSB表,让两个表的学号相等 WHEN MATCHED --当匹配的时候,把XSB表赋值给A表,下面用update来实现 THEN UPDATE SET A.StudentName = XSB.StudentName, A.StudentSex = XSB.StudentSex, A.Sbrithday = XSB.Sbrithday,A.StudentSpecialty = XSB.StudentSpecialty,A.SumCredit = XSB.SumCredit, A.StudentRemarks = XSB.StudentRemarks WHEN NOT MATCHED --当不匹配的时候,就插入该数据 THEN INSERT VALUES(XSB.StudentNo,XSB.StudentName,XSB.StudentSex,XSB.Sbrithday,XSB.StudentSpecialty,XSB.SumCredit,XSB.StudentRemarks) WHEN NOT MATCHED BY SOURCE --当发现A中有XSB中没有的数据时,就删除该数据(因为A要和XSB同步) THEN DELETE; SELECT * FROM A
结果同步