38 09网络数据库电子教案实践.docx
《38 09网络数据库电子教案实践.docx》由会员分享,可在线阅读,更多相关《38 09网络数据库电子教案实践.docx(36页珍藏版)》请在冰点文库上搜索。
3809网络数据库电子教案实践
课次
第3次实践课
章节课题
实验三企业管理器创建数据表(设置表的主键、外键和建立表间的关系;为表增加约束)
教学目的和要求
掌握使用企业管理器创建数据库表(建立主外表关系、为表添加约束)及添加数据
重点难点
设置表的主键、外键和建立表间的关系;为表增加约束
课时
2课时
讲授方式
上机操作
教学过程
附于表后
作业
附于表后
课堂总结
用企业管理器创建数据库表及向数据库表中录入数据
试验三
创建数据库操作步骤:
“SQLServer组”,右击——“新建SQLServer注册”(注意:
服务器选择(local))——“数据库”,右击——“新建数据库”——“设置数据库属性”(常规、数据文件、事务日志,此三项设置可参照教材P81)
常规:
输入“名称”
数据文件:
主要数据文件(文件名,一般会默认生成、位置、初始大小、文件自动增长、最大文件大小),扩展名.MDF;次要数据文件(文件名,一般会默认生成、位置、初始大小、文件自动增长、最大文件大小),扩展名.NDF;
事务日志:
文件名,一般会默认生成、位置、初始大小、文件自动增长、最大文件大小。
.LDF
第一部分:
创建数据库Students(学生数据库)
数据库包括:
一个主文件Students_Data.MDF(初始大小为2MB;文件自动增长:
按百分比20;将文件增长限制为500M)
一个次要文件Students_Data.NDF(初始大小为1MB;文件自动增长:
按兆字节1MB;将文件增长限制为500M)
一个日志文件Students_Log.LDF(初始大小为1MB;文件自动增长:
按百分比20;将文件增长限制为500M)
并且要把这些三个文件文件保存到F盘上的文件夹StudentsData里
创建数据库表步骤:
点击已创建的数据库前的“+”,右击“表”——“新建表”——设计要创建的新数据库表(列名、数据类型、长度、允许空;设置主键、建立约束、关系等等)——点击“保存”按钮——输入表名——点击“确定”
第二部分:
在数据库中创建表:
StudentInfo(学生信息表)表结构如下:
要求:
Scode“标识”设置:
Saddress默认值:
Semail检查约束:
Sphone检查约束
SGrade默认值
SSex检查约束
StuCourse(科目表)
CourseID为主键
StuScore(成绩表)
设置StudentID和CourseID做主键
方法:
按Shift键选中StudentID和CourseID,右击,选择“设置主键”
Score约束
第三部分建立关系
关系图:
关系图命名为Student
第四部:
插入数据
1:
往学生表中插入数据如下:
2:
往科目表中插入数据如下:
3:
往成绩表中插入数据如下:
课次
第4次实践课
章节课题
实验四数据管理(使用T-SQL进行增、改、删数据)
教学目的和要求
理解T-SQL及其作用;使用SQLServer中的逻辑表达式和运算符;
掌握使用T-SQL插入、更新、删除数据
重点难点
T-SQL插入、更新、删除数据
课时
2课时
讲授方式
上机操作
教学过程
附于表后
作业
附于表后
课堂总结
掌握T-SQL增、改、删数据
本次试验的素材:
数据库students;数据库表studentInfo(列名:
Sname、Scode、Saddress、Semail、Sphone、SGrade、SSex);数据库表StuCourse(列名:
CourseId、CourseName、BookName);数据库表StuScore(列名:
StudentId、CourseId、Score)
实验四内容:
第一部分插入数据
插入语句语法格式:
INSERT[INTO]<表名>[列名]
VALUES<值列表>
Ø[INTO]是可选的,可以省略
Ø表名是必须的,表的列名是可选的,如果省略,将一次插入
Ø多个列名和多个值列表用逗号分隔
练习1、往StudentIfo表中插入数据如下:
T-SQL操作代码如下:
练习2、往StuCourse表中插入数据如下:
T-SQL操作代码如下:
练习3、往StuScore表中插入数据如下:
T-SQL操作代码如下:
第二部分:
修改
更新数据语法格式:
UPDATE<表名>SET<列名=更新值>
[WHERE<更新条件>]
练习4、把‘刘明’的地址改为‘湖南常德’,把‘刘明’的性别改为‘男’
updatestudentinfosetssex='男',saddress='湖南常德'wherescode=’刘明’
练习5、把所有学生的CourseID为3的课程成绩提高5%
updatestuscoresetscore=score*1.05wherecourseid=3
练习6、把Email中含有sohu的学生年级改为3,地址改为“湖南长沙”
updatestudentinfosetsaddress='湖南长沙'wheresemaillike'%sohu%'
练习7、把学号为3,科目号为4的学生成绩改为70分
updatestuscoresetscore=70wherestudentid=3andcourseid=4
第三部分:
删除
DELETEFROM<表名>[WHERE<删除条件>]
注意:
TRUNCATETABLE<表名>与
DELETEFROM<表名>等价
练习8、李永因为违反学校纪律,被开除(删除学生名为李永的记录,如果有错误,找出问题,并删除之)
注意:
使用DELETE删除数据时,不能删除被外键值所引用的数据行
提示:
先删外表deletefromstuscorewherestudentid=2
后删主表deletefromstudentinfowherescode=2
课次
第5次实践课
章节课题
实验五数据查询(条件查询;返回限制行,查询排序)
教学目的和要求
1.会使用SELECT语句进行条件查询
2.掌握在查询中返回限制行
3.会进行查询排序
重点难点
条件查询、返回限制行查询、查询排序
课时
2课时
讲授方式
上机操作
教学过程
附于表后——实验内容
作业
附于表后的练习
课堂总结
掌握这三种查询
实验五:
一、实验素材(存放在文件夹“sy5素材”)
数据库Students(三个数据库表StudentInfo、StuCourse、StuScore)
数据库表StudentInfo的结构如下
检查约束:
([SClass]like'[0-9][0-9][0-9][0-9][0-9]')
([SEmail]like'%@%')
([SPhone]like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
([SSex]='男'or[SSex]='女')
数据库表StuCourse的结构如下
数据库表StuScore的结构如下:
检查约束:
([Score]>=0and[Score]<=100)
数据库表StudentInfo与数据库表StuScore关系如下:
数据库表StuCourse与数据库表StuScore关系如下:
StudentInfo、StuCourse、StuScore三表的数据分别如下图:
二、实验五操作内容
首先,启动sqlserver服务器;其次,打开企业管理,附加文件夹“sy5素材”下的数据库Students;再次,打开查询分析器,连接好sqlserver服务器。
查询语句通用格式:
SELECT<列名>
FROM<表名>
[WHERE<查询条件表达式>]
[ORDERBY<排序的列名>[ASC或DESC]]
例1、查询StudentInfo的所有数据
操作代码:
select*fromstudentinfo
练习1:
分别查询另两个表的所有数据
例2、查询男学员信息
操作代码:
select*FROMStudentinfowhereSSEX='男'
练习2:
查询女学员信息(有两种方法)
例3、查询08114班学员信息
操作代码:
SELECT*FROMStudentInfoWHERESClass='08114'
练习3:
查询‘湖南长沙’的学员信息
例4、查询‘女’学员信息,只包括学号、姓名、地址;并且按学号的升序显示
操作代码:
SELECTSCode,SName,SaddressFROMStudentinfo
WHERESSEX='女'
ORDERBYScode
练习4:
查询‘男’学员信息,只包括姓名、学号、地址;并且按学号的降序显示
例5、查询不是‘湖南长沙’的学员信息,显示学员学号、学员姓名、学员地址;
操作代码:
SELECTSCodeAS学员编号,SNameAS学员姓名,SAddressAS学员地址
FROMStudentInfo
WHERESAddress<>'湖南长沙'
练习5:
查询不是‘湖南株洲’的学员信息,显示学员学号、学员姓名、学员地址;
例4、查询邮箱不为空的学员姓名、学员邮箱
操作代码:
SELECTSname,SemailFROMStudentInfoWHERESEmailISnotNULL
练习5:
查询邮箱为空的学员姓名、学员邮箱
例6、查询表StudentInfo,显示姓名、地址和常量列‘学校名称’,该常量列的值为’益阳职院’
操作代码:
SELECT姓名=SName,地址=SAddress,'益阳职院'AS学校名称
FROMStudentInfo
练习6、查询表StudentInfo,显示姓名、性别、地址和常量列‘学校名称’,该常量列的值为’湖南师大’
例7、查询女学员的姓名、地址信息,且返回前两行记录
SELECTTOP2SName,SAddress
FROMStudentInfoWHERESSex='女'
练习7:
查询男学员的姓名、电话,且返回前三行记录
例8、查询女学员的姓名、地址信息,且返回前60%记录
SELECTTOP60PERCENTSName,SAddress
FROMStudentInfoWHERESSex='女'
练习8:
查询男学员的姓名、地址信息,且返回前50%记录
例9、查询综合成绩及格的学员成绩信息,显示学员编号、课程编号、综合成绩(原成绩的90%+5)
SELECTStudentIDAs学员编号,courseIDAs课程编号,(Score*0.9+5)As综合成绩
FROMstuScore
WHERE(Score*0.9+5)>=60
ORDERBYScoreasc
练习9:
查询综合成绩及格的学员成绩信息,显示学号、课程编号、综合成绩(原成绩的85%+7)
例10、查询成绩及格的学员成绩信息,显示学员编号、课程编号、成绩;且依次按成绩降序,课程编号升序显示
SELECTStudentIDAs学员编号,courseIDAs课程编号,ScoreAs成绩
FROMstuScore
WHEREScore>=60
ORDERBYScoredesc,CourseIDasc
练习10:
查询成绩高于70的学员成绩信息,显示学员编号、课程编号、成绩;且依次按成绩升序,课程编号降序显示
附加练习:
usenorthwind
select*fromemployees
SELECTFirstName+'.'+LastNameAS'姓名'
FROMEmployees
SELECT'姓名'=FirstName+'.'+LastName
FROMEmployees
思考:
此两条查询语句的作用是否相同,作用是什么?
课次
第6次实践课
章节课题
实验六数据查询(SQLServer2000中的函数用法)、三种多行插入技术
教学目的和要求
掌握字符串函数、日期函数、数学函数、系统函数
会应用多行插入技术
重点难点
字符串函数日期函数三种多行插入技术
课时
2课时
讲授方式
上机操作
教学过程
附于表后
作业
附于表后
课堂总结
掌握SQLServer2000中的函数用法;三种多行插入技术
一、字符串函数
CHARINDEX(指定字符串参数,字符串参数,开始查找位置参数)
用来寻找一个指定的字符串在另一个字符串中的起始位置。
练习1:
查找'C#'在'你们的C#课程'的起始位置,要求从第2个位置开始查找。
LEN(字符串参数)返回传递给它的字符串长度
练习2:
查询返回'MySQL课程’的字符串长度
LOWER(待转换字符串参数)把传递给它的字符串转换为小写
练习3:
把'MYSQL课程'转换成小写,查询显示
UPPER(待转换字符串参数)把传递给它的字符串转换为大写
练习4:
把'sqlserver课程'转换成大写,查询显示
LTRIM(字符串参数)清除字符左边的空格
练习5:
把'sqlserver课程'字符左边的空格清除,查询显示
RTRIM(字符串参数)清除字符右边的空格
练习6:
把'sqlserver课程'字符右边的空格清除,查询显示
RIGHT(指定字符串参数,返回字符个数参数)从字符串右边返回指定数目的字符
练习7:
返回'阿拉法.司马吉'右边的3个字符,查询显示
LEFT(指定字符串参数,返回字符个数参数)从字符串左边返回指定数目的字符
练习8:
返回'阿拉法.司马吉'左边的3个字符,查询显示
REPLACE(指定字符串参数,被替换字符串参数,替换字符串参数)替换一个字符串中的字符
练习9:
把'莫乐可切.杨可'中的‘可’替换成‘米’,查询显示
STUFF(指定字符串参数,起始位置参数,长度参数,替换字符串参数)
在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串
练习10:
把'ABCDEFG'中的第2位置开始,4个字符长度的字符串替换为‘我的专业’,查询显示
二、日期函数
GETDATE()取得当前的系统日期
练习11:
获取当前系统日期,查询显示
DATEADD(日期部分,数值,日期)将指定的数值添加到指定的日期部分后的日期
SELECTDATEADD(mm,4,'99/01/02')
练习12:
给'01/02/1999'的年份增加5,查询显示
DATEDIFF(日期部分,日期1,日期2)两个日期之间的指定日期部分的区别
练习13:
返回'99/01/02'与'99/05/02'的月份区别,查询显示
DATENAME(日期部分,日期)日期中指定日期部分的字符串形式
练习14:
返回'01/01/2000'的月份,查询显示
DATEPART(日期部分,日期)日期中指定日期部分的整数形式
练习15:
返回'01/01/2000'的月份,查询显示
三、数学函数
ABS(数值表达式参数)取数值表达式的绝对值
练习16:
求-43.5的绝对值,查询显示
CEILING(数值表达式参数)返回大于或等于所给数字表达式的最小整数
练习17:
求43.5的最小整数,查询显示;练习18:
求-43.5的最小整数,查询显示;
FLOOR(数值表达式参数)取小于或等于指定表达式的最大整数
练习19:
求43.5的最大整数,查询显示;练习20:
求-43.5的最大整数,查询显示;
POWER(底数数值表达式,指数数值表达式)取数值表达式的幂值
练习21:
求3的2次幂值,查询显示
SIGN(数值表达式参数)取数值表达式的符号,对于正数返回+1,对于负数返回-1,对于0则返回0
练习22:
求-43.5的符号,查询显示
SQRT(数值表达式参数)取浮点表达式的平方根
练习23:
求16的平方根,查询显示
四、系统函数
CONVERT(目标数据类型(长度),待转换数据)用来转变数据类型
例如SELECTCONVERT(VARCHAR(3),123)
思考执行结果:
SELECTCONVERT(float,123)
SELECTCONVERT(int,123.55)
练习24:
将123456转换为可变长度字符数据类型且该数据类型的长度为6,查询显示
练习:
25CURRENT_USER返回当前用户的名字
例如SELECTCURRENT_USER
DATALENGTH(字符串参数)返回用于指定字符串表达式的字节数
练习26:
查询返回'MySQL课程’的字符串字节数*/
练习:
27HOST_NAME()返回当前用户所登录的计算机名字
例如SELECTHOST_NAME()
练习:
28返回当前所登录的用户名称
SELECTSYSTEM_USER
练习:
29从给定的用户ID返回用户名
SELECTUSER_NAME(0)SELECTUSER_NAME
(1)SELECTUSER_NAME
(2)
案例1
某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:
卡里面的“O和0”(哦和零)“i和1”(哎和一),用户反映说看不清楚,
公司决定,把存储在数据库中的密码中所有的“哦”都改成“零”,把所有的“i”都改成“1”;
请编写SQL语句实现以上要求;
数据库表名:
Card;密码字段名:
PassWord;*/
usebank
deletefromcard
insertcardvalues('01','黎明','0oI1')
insertcardvalues('02','张明','0o23I1')
SELECT*FROMCARD
解决方法一:
UpdateCardSetPassWord=Replace(password,'O','0')
UpdateCardSetPassWord=Replace(password,'I','1')
解决方法二:
UpdateCard
SetPassWord=Replace(Replace(password,'O','0'),'I','1')
案例2
在数据库表中有以下字符数据,如:
13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
现在希望通过SQL语句进行排序,并且首先要按照前半部分的数字进行排序,
然后再按照后半部分的数字进行排需,输出要排成这样:
13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2
数据库表名:
SellRecord;字段名:
ListNumber;
SELECT*FROMsellrecord
insertSellRecordvalues('13-1')
insertSellRecordvalues('13-2')
insertSellRecordvalues('13-3')
insertSellRecordvalues('13-10')
insertSellRecordvalues('13-100')
insertSellRecordvalues('13-108')
insertSellRecordvalues('13-18')
insertSellRecordvalues('13-11')
insertSellRecordvalues('13-15')
insertSellRecordvalues('14-1')
insertSellRecordvalues('14-2')
案例2实现操作代码:
SELECTListNumber
FROMSellRecord
ORDERBYConvert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),
Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))
多行插入技术1、
当新表中的表结构与旧表的表结构相同时,可以用下面语句把旧表中的所需数据一次性插入到新表中
INSERTINTO<新表名>(新表列名)
SELECT<源表列名>
FROM<源表名>
当新表TongXunLu中的表结构与旧表的表Studentinfo结构相同时,
可以用下面语句把旧表中的所需数据一次性插入到新表中
示例演示操作代码:
INSERTINTOTongXunLu(姓名,地址,电子邮件)
SELECTSName,SAddress,SEmail
FROMStudentinfo
多行插入技术2、
/*我要对一张表作测试工作,但又不想破坏表的数据,怎么办?
?
----------把这张表复制出来
SELECT源表列名
INTO<新表名>
FROM<源表名>
示例演示操作代码:
SELECTStudentinfo.SName,Studentinfo.SAddress,Studentinfo.SEmail
INTOTxl
FROMStudentinfo
/*紧接上面的问题,当我复制了源表相应的列出来后,发现没有适合做主键的列,怎么?
?
?
------------插入新的标识列
SELECT列名1,列名2,…,IDENTITY(数据类型,标识种子,标识增长量)AS列名
INTO新表
FROM原始表
示例演示操作代码:
SELECTStudentinfo.SName,Studentinfo.SAddress,Studentinfo.SEmail,IDENTITY(int,1,1)AsStudentID
INTOTongxl
FROMStudentinfo
多行插入技术3、
前面讲的多行插入都是有源数据存在,那么我想自己输入新的数据进去,
但只想用一条Insert语句,能成功吗?
INSERTINTO<表名>(列名)
SELECT<值列表>UNION
SELECT<值列表>UNION
INSERTSTUDENTinfo2(SName,SGrade,SSex)
SELECT'测试女生1',7,'女'UNION
SELECT'测试女生2',7,'