关系数据库与SQL Server 例题源代码_第1页
关系数据库与SQL Server 例题源代码_第2页
关系数据库与SQL Server 例题源代码_第3页
关系数据库与SQL Server 例题源代码_第4页
关系数据库与SQL Server 例题源代码_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关系数据库与SQL Server 2012例题源代码第1章 关系数据库原理第2章 SQL Server 2012基础第3章 数据库的创建与管理【例3-2】创建一个不带任何参数的数据库DB1。CREATE DATABASE DB1【例3-3】创建一个数据库,指定数据库的数据文件所在位置。CREATE DATABASE DB2ON( NAME =DB2, FILENAME = 'D:TESTDB2.MDF')【例3-4】创建一个数据库,指定数据库的数据文件所在位置、初始容量、最大容量和文件增量。CREATE DATABASE DB3ON( NAME =DB3, FILENAME =

2、 'D:TESTDB3.MDF',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5% )【例3-5】创建一个数据库,指定数据库的数据文件和日志文件的存放位置。CREATE DATABASE DB4ON( NAME =DB4, FILENAME = 'D:TESTDB4.MDF',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5% )LOG ON( NAME = DB4LOG , FILENAME = 'D:TESTDB4.LDF')【例3-6】创建一个数据库,该库共包含3个数据文件和2个日志文件

3、。CREATE DATABASE DB5ON ( NAME = DB51, FILENAME = 'D:TESTDB51.MDF , SIZE = 100, MAXSIZE = 200, FILEGROWTH = 20 ) , ( NAME = DB52, FILENAME = 'D:TESTDB52.NDF , SIZE = 100, MAXSIZE = 200, FILEGROWTH = 20 ) , ( NAME = DB53, FILENAME = 'D:TESTDB53.NDF , SIZE = 100, MAXSIZE = 200, FILEGROWTH =

4、 20)LOG ON ( NAME = DB5LOG1, FILENAME = 'D:TESTDB5LOG1.LDF) , ( NAME = DB5LOG2, FILENAME = 'D:TESTDB5LOG2.LDF , SIZE = 50, MAXSIZE = 200, FILEGROWTH = 20 )【例3-7】创建一个数据库,该库共包含3个数据文件和2个自定义文件组。CREATE DATABASE DB6 ON ( NAME = DB61, FILENAME = ' D: TEST DB61.MDF , SIZE = 100, MAXSIZE = 200, F

5、ILEGROWTH = 20) , FILEGROUP FDB61 ( NAME = DB62, FILENAME = ' D: TEST DB62.NDF , SIZE = 100, MAXSIZE = 200, FILEGROWTH = 20 ) , FILEGROUP FDB62 ( NAME = DB63, FILENAME = ' D: TEST DB63.NDF , SIZE = 100, MAXSIZE = 200, FILEGROWTH = 20 )【例3-9】将数据库DB1的数据库名称改为“DB8”。ALTER DATABASE DB1 MODIFY NAME

6、 = DB8【例3-10】在数据库DB8中增加一个数据文件和一个事务日志文件。ALTER DATABASE DB8ADD FILE ( NAME = DB81 , FILENAME = D:TEST DB81.NDF ' )ALTER DATABASE DB8ADD LOG FILE ( NAME = DB8LOG1 , FILENAME = D:TEST DB8LOG1.LDF ' )【例3-11】在数据库DB8中增加一个名为“FDB8”的文件组。ALTER DATABASE DB8ADD FILEGROUP FDB8【例3-12】将数据库DB8中的FDB8文件组的名称改为“

7、FG8”。ALTER DATABASE DB8 MODIFY FILEGROUP FDB8 NAME = FG8【例3-13】在数据库DB8中增加两个数据文件到文件组“FG8”中,并将该文件组设为默认文件组。ALTER DATABASE DB8ADD FILE ( NAME= DB82 , FILENAME= D:TEST DB82.NDF' ) ,( NAME= DB83 , FILENAME= D:TEST DB83.NDF' )TO FILEGROUP FG8GOALTER DATABASE DB8MODIFY FILEGROUP FG8 DEFAULT【例3-14】将数

8、据库DB8中增加的“DB83”的数据库文件名称改为“DDD”。ALTER DATABASE DB8MODIFY FILE (NAME= DB83, NEWNAME= DDD, FILENAME= D:TEST DDD.NDF ' )【例3-15】将数据库DB8的文件组“FG8”中的数据文件“DB82”删除,并将事务日志文件“DB8LOG1”删除。ALTER DATABASE DB8REMOVE FILE DB82ALTER DATABASE DB8REMOVE FILE DB8LOG1【例3-16】将数据库DB8中的文件组“FG8”删除。ALTER DATABASE DB8 MODIF

9、Y FILEGROUP PRIMARY DEFAULT GOALTER DATABASE DB8 REMOVE FILE DDDGOALTER DATABASE DB8 REMOVE FILEGROUP FG8【例3-18】将数据库DB3、DB4、DB5、DB6、DB7删除。DROP DATABASE DB3,DB4,DB5,DB6,DB7【例3-20】查看指定数据库的信息,如图3-11所示。sp_helpdb db【例3-21】查看服务器上所有数据库的信息,如图3-12所示。sp_helpdb第4章 数据表的创建与管理【例4-2】在XSCJ数据库中,创建一个名为KC1的数据表,该表中只涉及到

10、列的定义。CREATE TABLE XSCJ.DBO.KC1( 序号 INT ,课程号 CHAR (3 ) ,课程名 VARCHAR (20 ) ,授课教师 VARCHAR (10 ) ,开课学期 TINYINT ,学时 TINYINT ,学分 TINYINT)【例4-3】在XSCJ数据库中,创建一个名为KC2的数据表,该表中的“序号”列为标识列。USE XSCJ CREATE TABLE KC2( 序号 INT IDENTITY , 课程号 CHAR (3 ) ,课程名 VARCHAR (20 ) ,授课教师 VARCHAR (10) ,开课学期 TINYINT ,学时 TINYINT ,学

11、分 TINYINT)【例4-4】在XSCJ数据库中,创建一个名为KC的数据表,该表的结构如表4-3所示。方法一:在新建表时,在单个列定义之后,紧接着定义约束。USE XSCJ CREATE TABLE KC( 序号 INT IDENTITY , 课程号 CHAR (3) NOT NULL CONSTRAINT PK_KC_KCH PRIMARY KEY , 课程名 VARCHAR (20) NOT NULL ,授课教师 VARCHAR (10) , 开课学期 TINYINT NOT NULL CONSTRAINT DF_KC_XQ DEFAULT 1 CONSTRAINT CK_KC_XQ C

12、HECK (开课学期>=1 and 开课学期<=6 ) , 学时 TINYINT NOT NULL ,学分 TINYINT)方法二:在新建表时,在所有列定义完之后,再定义约束。USE XSCJ CREATE TABLE KC( 序号 INT IDENTITY , 课程号 CHAR (3) NOT NULL , 课程名 VARCHAR (20) NOT NULL ,授课教师 VARCHAR (10) , 开课学期TINYINT NOT NULL DEFAULT 1 ,学时 TINYINT NOT NULL ,学分 TINYINT CONSTRAINT PK_KC_KH PRIMARY

13、 KEY(课程号) , CONSTRAINT CK_KC_XQ CHECK (开课学期>=1 AND 开课学期<=6) )方法三:在已经创建好的表上定义约束,通过修改该表的方式添加约束。ALTER TABLE KCADD CONSTRAINT PK_KC_KH PRIMARY KEY(课程号) , CONSTRAINT DF_KC_XQ DEFAULT 1 FOR 开课学期 , CONSTRAINT CK_KC_XQ CHECK (开课学期>=1 AND 开课学期<=6 ) 【例4-5】在XSCJ数据库中,创建一个名为XS_KC的数据表,该表的结构如表4-4所示。USE

14、 XSCJ CREATE TABLE XS_KC( 学号 CHAR (10 ) NOT NULL REFERENCES XSQK(学号) , 课程号 CHAR (3 ) NOT NULL ,成绩 TINYINT , 学分 TINYINTPRIMARY KEY (学号,课程号) , CHECK (成绩>=0 and 成绩<=100 ) , FOREIGN KEY(课程号) REFERENCES KC(课程号) )【例4-7】在XSQK表中,增加两列:“籍贯”字段,char(12),默认值为“重庆”。“email”字段,varchar(30) 。ALTER TABLE XSQKADD

15、籍贯 CHAR(12) CONSTRAINT DF_XSQK_JG DEFAULT 重庆 , EMAIL VARCHAR(30)【例4-8】将学生课程表XS_KC中的成绩列的数据类型修改为numeric(4,1)。ALTER TABLE XS_KCALTER COLUMN 成绩 NUMERIC(4,1)【例4-9】在XSQK表的“姓名”列上增加唯一性约束,约束名为UK_XSQK_XM,并忽略对原有数据的约束检查。ALTER TABLE XSQKWITH NOCHECKADD CONSTRAINT UK_XSQK_XM UNIQUE(姓名)【例4-10】将XSQK表中的“姓名”列上的约束删除。A

16、LTER TABLE XSQK DROP CONSTRAINT UK_XSQK_XM【例4-11】将XSQK表中的“籍贯”、“emai”列删除。ALTER TABLE XSQK DROP CONSTRAINT DF_XSQK_JG ALTER TABLE XSQK DROP COLUMN 籍贯, EMAIL 【例4-12】暂停XSQK表中的所有约束。ALTER TABLE XSQKNOCHECK CONSTRAINT ALL【例4-14】向XSQK表插入两行数据。INSERT INTO XSQK (学号,姓名,性别,出生日期,专业名,所在系,联系电话,总学分,备注)INSERT XSQK (学

17、号,姓名,性别,专业名,所在系,出生日期)VALUES (2012130405 , 田芳, 0 , 信息安全 ,计算机 ,1995-7-15)【例4-15】将XS_KC表中的成绩不及格的记录,插入到NOPASS表中。USE XSCJINSERT INTO NOPASSSELECT * FROM XS_KC WHERE 成绩<60GOSELECT * FROM NOPASS【例4-16】将XS_KC表中课程号为“101”的不及格的学生成绩加5分。UPDATE XS_KCSET 成绩=成绩+5WHERE (课程号= 101 AND 成绩<60)【例4-17】删除XS_KC表中所有不及格

18、的记录。DELETE XS_KC WHERE (成绩< 60)【例4-20】用命令查看服务器上所有数据表的信息。sp_help 【例4-21】用命令查看XS_KC数据表的信息,查看的结果如图4-17所示。sp_help XS_KC 【例4-23】查看XS_KC数据表的表约束,查看结果如图4-19所示。sp_helpconstraint XS_KC第5章 数据查询【例5-1】查看XSQK表中的所有记录。查询结果如图5-1所示。SELECT * FROM XSQK 【例5-2】查询XSQK表中的学号、姓名和专业名信息。查询结果如图5-2所示。SELECT 学号, 姓名, 专业名FROM XS

19、QK【例5-3】查询XSQK表中的前3条记录。查询结果如图5-3所示。SELECT TOP 3 *FROM XSQK【例5-4】查看XS_KC表中的信息,其中,要求查询折算成绩,折算成绩为原成绩的70%。查询结果如图5-4所示。SELECT 学号, 课程号, 成绩, 成绩*0.7FROM XS_KC【例5-5】为【例5-4】中的计算列指定别名。查询结果如图5-5所示。SELECT 学号, 课程号, 成绩 AS 原成绩, 调整成绩1=成绩*0.7 ,成绩+5 调整成绩2FROM XS_KC【例5-6】在查询结果集中的“备注”列前增加了一个的说明列。查询结果如图5-6所示。SELECT 学号, 姓

20、名, '职务是', 备注FROM XSQK【例5-7】在查询结果集中的“备注”列前增加“其职务是”的说明列。查询结果如图5-7所示。SELECT 学号, 姓名, '其''职务''是', 备注FROM XSQK【例5-8】查看XS_KC表中学生选修了哪些课程。查询结果如图5-8所示。SELECT DISTINCT 课程号FROM XS_KC【例5-9】查询XS_KC表中成绩不及格的学生记录。查询结果如图5-10所示。SELECT 学号, 课程号, 成绩FROM XS_KCWHERE 成绩<60【例5-10】查询XSQK表中19

21、96年及其后出生的学生信息。查询结果如图5-11所示。SELECT *FROM XSQKWHERE 出生日期>1995-12-31【例5-11】查询XSQK表中信息安全专业、性别是1的学生信息。查询结果如图5-12所示。SELECT 学号, 姓名, 性别, 专业名FROM XSQKWHERE 性别=1 AND 专业名=信息安全【例5-12】查询XS_KC表中成绩在70和80之间的学生信息,查询结果如图5-13所示。SELECT *FROM XS_KCWHERE 成绩>=70 AND 成绩<=80【例5-13】查询1996年12月出生的学生信息,查询结果如图5-14所示。SEL

22、ECT 姓名, 性别, 出生日期FROM XSQKWHERE 出生日期 BETWEEN 1996-12-01 AND 1996-12-31【例5-14】查询XSQK表中的所有陈姓的学生信息,查询结果如图5-15所示。SELECT 学号, 姓名FROM XSQKWHERE 姓名 LIKE '陈%'【例5-15】查询XSQK表中电话号码尾数为3的学生信息,查询结果如图5-16所示。SELECT *FROM XSQKWHERE 联系电话 LIKE %3【例5-16】查询XSQK表中学号尾数不为1、2、3的学生信息,查询结果如图5-17所示。SELECT * FROM XSQK WHE

23、RE 学号 LIKE %123或 SELECT * FROM XSQK WHERE 学号 NOT LIKE %123【例5-17】查询XS_KC表中课程号为101、105或108的学生成绩信息,查询结果如图5-18所示。SELECT 学号, 课程号, 成绩FROM XS_KCWHERE 课程号 IN ( '101', '105', '108' )【例5-18】将【例5-17】中的代码改成如下形式,其查询结果不变。SELECT 学号, 课程号, 成绩FROM XS_KCWHERE 课程号='101' OR 课程号='105&

24、#39; OR 课程号='108'【例5-19】查询XSQK表中的学生干部的名单,查询结果如图5-19所示。SELECT 学号, 姓名, 备注FROM XSQKWHERE 备注 IS NOT NULL【例5-20】为数据源指定别名。SELECT * FROM XS_KC CJ【例5-21】查询XSQK表的记录,并以姓名降序排列。SELECT *FROM XSQKORDER BY 姓名 DESC【例5-22】查询XSQK表的记录,并以出生日期升序排列。SELECT 学号, 姓名, 出生日期FROM XSQKORDER BY 3【例5-23】查询XS_KC表的记录,并先按课程号升序

25、排列,当课程号相同时再按成绩降序排列。查询结果如图5-20所示。SELECT 学号, 课程号, 成绩 FROM XS_KCORDER BY 2, 3 DESC【例5-24】将【例5-23】的查询结果保存到新表TEMP_KC中。SELECT 学号, 课程号, 成绩 INTO TEMP_KCFROM XS_KCORDER BY 2, 3 DESC【例5-25】计算XS_KC表中成绩列的总和,并为该列指定别名为“总分”。查询结果如图5-21所示。SELECT SUM(成绩) AS 总分FROM XS_KC【例5-26】计算XS_KC表中成绩列的算数平均值,并为该列指定别名为“平均分”。SELECT

26、AVG(成绩) AS 平均分FROM XS_KC【例5-27】计算XS_KC表中成绩列的最大值,并为该列指定别名为“最高分”。SELECT MAX(成绩) AS 最高分FROM XS_KC【例5-28】计算XS_KC表中成绩列的最小值,并为该列指定别名为“最低分”。SELECT MIN(成绩) AS 最低分FROM XS_KC【例5-29】计算XSQK表中学生记录的行数,可以用以下两种方法实现,其结果一样。SELECT COUNT(学号) FROM XSQK或 SELECT COUNT( * ) FROM XSQK【例5-30】计算XS_KC表中成绩不及格的学生人次,并为该列指定别名为“不及格

27、学生人次”。查询结果如图5-22所示。SELECT COUNT(DISTINCT 学号) AS '不及格的学生人数'FROM XS_KCWHERE 成绩< 60【例5-31】在XS_KC表中,统计每门课程的平均分。SELECT 课程号, AVG(成绩) AS 平均分FROM XS_KCGROUP BY 课程号【例5-32】在XSQK表中,统计各专业男女生的人数。统计结果如图5-25所示。SELECT 专业名, 性别, COUNT(性别) AS 人数FROM XSQKGROUP BY 专业名, 性别ORDER BY 专业名【例5-33】在XSQK表中,统计各专业男女生的人数

28、超过2人的信息。统计结果如图5-26所示。SELECT 专业名, 性别, COUNT(性别) AS 人数FROM XSQKGROUP BY 专业名, 性别HAVING COUNT(性别)>2【例5-34】查询不及格学生的学号、姓名、课程号和成绩信息。查询结果如图5-27所示。 ANSI连接语法形式如下:SELECT XSQK.学号, 姓名, 课程号, 成绩FROM XSQK INNER JOIN XS_KCON XSQK.学号=XS_KC.学号WHERE 成绩<60 SQL Server连接语法形式如下:SELECT XSQK.学号, 姓名, 课程号, 成绩FROM XSQK, X

29、S_KCWHERE XSQK.学号=XS_KC.学号 AND 成绩<60【例5-35】用左外连接方式查询学生的学号、姓名、课程号和成绩信息。查询结果如图5-28所示。SELECT XSQK.学号, 姓名, 课程号, 成绩FROM XSQK LEFT OUTER JOIN XS_KCON XSQK.学号=XS_KC.学号【例5-36】用右外连接方式查询不及格学生的学号、姓名、课程号和成绩信息。查询结果如图5-29所示。SELECT XSQK.学号, 姓名, 课程号, 成绩FROM XSQK RIGHT OUTER JOIN XS_KCON XSQK.学号=XS_KC.学号WHERE 成绩&

30、lt;60【例5-37】用全外连接方式查询学号、姓名、课程号、成绩。查询结果如图5-30所示。SELECT XSQK.学号, 姓名, 课程号, 成绩FROM XSQK FULL OUTER JOIN XS_KCON XSQK.学号=XS_KC.学号【例5-38】在查询结果集中一行显示每个学生的两门课程成绩。查询结果如图5-31所示。 ANSI连接语法形式如下:SELECT A.学号, A.课程号, A.成绩, B.课程号, B.成绩FROM XS_KC A JOIN XS_KC B ON A.学号=B.学号WHERE A.课程号<B.课程号 SQL Server连接语法形式如下:SELE

31、CT A.学号, A.课程号, A.成绩, B.课程号, B.成绩FROM XS_KC A, XS_KC BWHERE A.学号=B.学号 AND A.课程号<B.课程号【例5-39】查询平均分低于60分的学生学号和姓名。查询结果如图5-32所示。SELECT 学号, 姓名FROM XSQK AWHERE (SELECT AVG(成绩) FROM XS_KC B WHERE B.学号=A.学号)<60【例5-40】查询有不及格学生的课程的授课教师。查询结果如图5-33所示。SELECT DISTINCT 授课教师FROM KCWHERE 课程号=ANY(SELECT 课程号 FRO

32、M XS_KC B WHERE 成绩<60)【例5-41】查询每门课程的最低分。查询结果如图5-34所示。SELECT *FROM XS_KC AWHERE 成绩<=ALL(SELECT 成绩 FROM XS_KC B WHERE B.课程号=A.课程号)或SELECT *FROM XS_KC AWHERE 成绩=(SELECT MIN(成绩) FROM XS_KC B WHERE B.课程号=A.课程号)【例5-42】将【例5-40】中的查询改为用“IN”运算符。查询结果如图5-35所示。SELECT DISTINCT 授课教师FROM KCWHERE 课程号 IN( SELEC

33、T 课程号 FROM XS_KC WHERE 成绩<60 )【例5-43】查询至少有一门课程不及格的学生信息。查询结果如图5-36所示。SELECT DISTINCT 学号, 姓名FROM XSQK AWHERE EXISTS( SELECT * FROM XS_KC B WHERE B.成绩<60 AND B.学号=A.学号 )第6章 视图与索引【例6-2】创建一个名为“V_不及格学生信息”的视图,该视图包含所有有不及格记录的学生的学号、姓名和原始成绩。执行结果如图6-5所示。USE XSCJGOCREATE VIEW V_不及格学生信息(学号,姓名,原始成绩)ASSELECT

34、DISTINCT XSQK.学号,姓名,成绩FROM XSQK, XS_KCWHERE XSQK.学号=XS_KC.学号 AND XS_KC.成绩<60GOSELECT * FROM V_不及格学生信息【例6-3】查看XSCJ数据库中的“V_不及格学生信息”视图的定义,执行结果如图6-6所示。USE XSCJGOEXEC sp_helptext V_不及格学生信息【例6-6】修改“V_学生信息”视图,使该视图用于查询是班委成员的男生信息,并强制检查指定条件。执行结果如图6-9所示。USE XSCJGOALTER VIEW V_学生信息ASSELECT 学号, 姓名, 性别, 出生日期,

35、专业名, 所在系, 备注 AS 职务FROM XSQKWHERE 性别=1 AND 备注 LIKE %WITH CHECK OPTIONGOSELECT * FROM V_学生信息【例6-8】通过“V_学生信息”视图中添加一条记录。执行结果如图6-14所示。USE XSCJGOINSERT INTO V_学生信息VALUES( '2012130112', '陈立', 1, '1996-05-08', '信息安全', '计算机应用', '体育委员')GOSELECT * FROM XSQK【例6-9】

36、将“V_学生信息”视图中的“张琳”的姓名改为“张林”。执行结果如图6-15所示。USE XSCJGOUPDATE V_学生信息SET 姓名='张林'WHERE 姓名='张琳'GOSELECT * FROM XSQK【例6-10】通过“V_学生信息”视图删除“张林”的记录。DELETE FROM V_学生信息WHERE 姓名='张林'【例6-13】为XS_KC表创建非聚集索引IX_XS_KC_学号_课程号,该索引包括学号和课程号两个索引列,均按升序排列。USE XSCJCREATE INDEX IX_XS_KC_学号_课程号ON XS_KC (学号

37、, 课程号)【例6-14】对【例6-13】作一点修改,使该索引变为唯一性的非聚集索引。由于索引已经存在,我们使用DROP_EXISTING选项删除同名的原索引,然后再创建新索引。USE XSCJCREATE UNIQUE INDEX IX_XS_KC_学号_课程号ON XS_KC (学号, 课程号)WITH DROP_EXISTING【例6-15】创建复杂的索引。为“XS_KC”表创建一个唯一索引,索引字段为“课程号”、“学号”,其中“课程号”为降序排列,该索引的包含性列里面包含“成绩”、“学分”两个字段。指定索引填充,索引的填充因子为70,并允许在Tempdb数据库中存储临时排序的信息,可以

38、忽略索引的重复键值,运行自动重新计算统计信息。USE XSCJCREATE UNIQUE INDEX IX_XS_KC_1ON XS_KC(课程号 DESC, 学号)INCLUDE(成绩, 学分)WITH(PAD_INDEX=ON,FILLFACTOR=70,SORT_IN_TEMPDB=ON,IGNORE_DUP_KEY=ON,STATISTICS_NORECOMPUTE=OFF)【例6-16】查看表XSQK中的索引信息。执行结果如图6-23所示。USE XSCJEXEC sp_helpindex XSQK【例6-18】重新生成“IX_XS_KC_学号_课程号”索引。ALTER INDEX

39、IX_XS_KC_学号_课程号 ON XS_KC REBUILD【例6-19】删除“XS_KC”表中的“IX_XS_KC_学号_课程号”索引。DROP INDEX XSQK.IX_XS_KC_学号_课程号【例6-20】为“XSCJ”数据库启用全文索引。EXEC sp_fulltext_database 'enable'【例6-22】为“XSCJ”数据库在默认位置创建一个全文目录“FTC_XSCJ”。EXEC sp_fulltext_catalog 'FTC_XSCJ', 'create'【例6-24】利用唯一索引PK_KC,用命令方式完成【例6-

40、23】中全文索引的创建。EXEC sp_fulltext_table 'KC', 'create', 'FTC_XSCJ', 'PK_KC'【例6-25】将KC表中的“课程名”列添加到全文索引中。EXEC sp_fulltext_column 'KC', '课程名', 'add'【例6-26】激活表的全文检索能力,在全文目录中注册表KC。EXEC sp_fulltext_table 'KC', 'activate'【例6-27】填充全文目录。EXEC

41、sp_fulltext_catalog 'FTC_XSCJ', 'start_full'第7章 规则与默认值【例7-1】创建数据库XSCJ的规则,规则名为CJ_rule,要求表XS_KC中成绩列的取值范围为0100。执行结果如图7-1所示。USE XSCJGOCREATE RULE CJ_ruleAS成绩>=0 AND 成绩<=100【例7-2】查看规则CJ_rule。执行结果如图7-2所示。USE XSCJGOEXEC sp_helptext CJ_rule【例7-3】将规则CJ_rule绑定到表XS_KC的成绩列上。执行结果如图7-3所示。USE

42、 XSCJGOEXEC sp_bindrule 'CJ_rule', 'XS_KC.成绩'【例7-4】解除XS_KC表中“成绩”列上绑定的规则。执行结果如图7-4所示。USE XSCJGOEXEC sp_unbindrule 'XS_KC.成绩'【例7-5】删除规则CJ_rule。USE XSCJGODROP RULE CJ_rule【例7-6】创建一个名为XS_def的默认值对象,要求默认值为20。执行结果如图7-5所示。USE XSCJGOCREATE DEFAULT XS_def AS 20【例7-7】将默认值XS_def绑定到表KC的“学

43、时”列上。执行结果如图7-6所示。USE XSCJGOEXEC sp_bindefault 'XS_def', 'KC.学时'【例7-8】删除数据库XSCJ中名为XS_def的默认值对象。执行结果如图7-7所示。USE XSCJGOEXEC sp_unbindefault KC.学时GODROP DEFAULT XS_def第8章 T-SQL编程【例8-1】在T-SQL中,可用多种方式使用常量。 作为算术表达式中的数据值:SELECT 成绩+5 FROM XS_KC 在WHERE子句中,作为与列进行比较的数据值:SELECT * FROM XS_KC WHERE

44、 学号='2012130101' 作为赋给变量的数据值:SET 学分=4 作为当前行的某列中的数据值。可使用UPDATE语句的SET子句或INSERT语句的VALUES子句来指定:UPDATE XS_KCSET 成绩=90WHERE 学号='2012130101' AND 课程号='101'或INSERT XS_KC VALUES(2012130101, 103, 78) 作为指定PRINT或RAISERROR语句发出的消息文本的字符串:PRINT 'This is a message.' 作为条件语句(例如:IF语句或CASE语

45、句)中进行测试的值:IF (SALESTOTAL>$100000.00) EXECUTE Proc_SALES【例8-2】声明3个变量,用两种不同的方法分别为变量赋值,并输出显示,执行结果如图8-1所示。DECLARE x1 char(10), x2 varchar(20), x3 char(8)SELECT x1='关系数据库', x2='SQL Server'SET x3='2012'PRINT x1+x2+x3【例8-3】定义一个整数变量,并将其作为循环计数器使用。DECLARE counter intSELECT counter=0

46、WHILE counter<10BEGINSELECT counter=counter+1PRINT counter END【例8-4】声明一个变量,将“XSCJ”数据库的“XSQK”表中的2012130101号学生的姓名赋值给变量,并输出显示,执行结果如图8-2所示。USE XSCJGODECLARE name varchar(10)SELECT name=姓名 FROM XSQK WHERE 学号='2012130101'SELECT name AS 姓名【例8-5】在Accounts表中检索tot_assets列,并将money数据类型的检索结果利用CAST或CON

47、VERT函数转换为varchar数据类型,以便在字符串连接中使用。SELECT (acct_firstname+acct_lastname)+-+CAST(tot_assets AS varchar(15)FROM Accounts或者SELECT (acct_firstname+acct_lastname)+- +CONVERT(varchar(15), tot_assets)FROM Accounts【例8-6】统计XSQK表中学生记录的行数。执行结果如图8-3所示。USE XSCJGODECLARE counter intSELECT counter=COUNT(*) FROM XSQK

48、PRINT '总行数为:'+STR(counter)【例8-7】将浮点数123.21转换为5个字符的字符串。执行结果如图8-4所示。DECLARE x floatSET x=123.21PRINT '将浮点数123.21转换成5个字符的字符串为:' +STR(x, 5, 1)【例8-8】查找KC表中课程号为“103”的课程名称,并计算该课程名称的字符数目。执行结果如图8-5所示。USE XSCJGODECLARE counter intSELECT counter=LEN(课程名) FROM KCWHERE 课程号='103'PRINT '

49、;103号课程名称的字符数为:'+STR(counter)【例8-9】将字符串“Hello World”中的字符全部转换为大写字母。执行结果如图8-6所示。DECLARE s1 varchar(20)SET s1='Hello World'PRINT '将“Hello World”中的字符全部转换为大写字母:'+UPPER(s1)【例8-10】从字符串“SQL Server 2012”的左边开始截取5个字符构成的子串。执行结果如图8-7所示。DECLARE s2 varchar(20)SET s2='SQL Server 2012'PRI

50、NT '从“SQL Server 2012”中截取5个字符构成的子串为:'+LEFT(s2, 5)【例8-11】修改【例8-6】中的显示结果,去除显示结果中多余的空格。执行结果如图8-8所示。USE XSCJGODECLARE counter intSELECT counter=COUNT(*) FROM XSQKPRINT '总行数为:'+LTRIM(STR(counter)【例8-12】分别计算在日期“2015-5-10”上加上22年、22月、22天后得到的新日期。执行结果如图8-9所示。SELECT DATEADD(yy, 22, '2015-5-

51、10') AS 加年后的新日期, DATEADD(mm, 22, '2015-5-10') AS 加月后的新日期, DATEADD(dd, 22, '2015-5-10') AS 加日后的新日期【例8-13】分别计算日期“2012-8-18”和“2015-5-10”相隔的天数、月数和年数。执行结果如图8-10所示。SELECT DATEDIFF(dd, '2012-8-18', '2015-5-10') AS 间隔天数, DATEDIFF(mm, '2012-8-18', '2015-5-10

52、9;) AS 间隔月数, DATEDIFF(yy, '2012-8-18', '2015-5-10') AS 间隔年数【例8-14】分别返回日期“2015-5-1”的年、月、日。执行结果如图8-11所示。SELECT DATEPART(yy, '2015-5-1') AS 年, DATEPART(mm, '2015-5-1') AS 月, DATEPART(dd, '2015-5-1') AS 日【例8-15】计算XSQK表中陈伟的年龄,并显示“年龄为:XX岁”。执行结果如图8-12所示。DECLARE nl va

53、rchar(4)SELECT nl=CONVERT(varchar(4), DATEDIFF(yy, 出生日期, GETDATE( )FROM XSQKWHERE 姓名='陈伟'PRINT '年龄为:'+nl+'岁'【例8-16】检查XSQK表中是否存在“李渊”这个人,若有则显示其信息,若无则显示“没有XX这个人!”。执行结果如图8-13所示。USE XSCJGODECLARE xm varchar(10)SET xm='李渊'IF EXISTS(SELECT * FROM XSQK WHERE 姓名=xm) SELECT * F

54、ROM XSQK WHERE 姓名=xmELSE PRINT '没有'+xm+'这个人!'【例8-17】计算1+2+3+100的累加和。执行结果如图8-14所示。DECLARE i int, sum intSET i=1SET sum=0WHILE (i<=100)BEGINSET sum=sum +iSET i=i+1ENDPRINT '1+2+3+100='+CAST(sum AS varchar(10)【例8-18】查找失败时输出错误信息并退出。执行结果如图8-15所示。USE XSCJGOIF NOT EXISTS(SELECT * FROM XSQK WHERE 姓名='李敏')BEGINPRINT 'not found'RETURNENDPRINT 'no error found'【例8-19】用IF和GOTO语句实现循环,求1+2+3+100的累加和。DECLARE i int, sum intSET i=1SET sum=0CountLoop:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论