分享
分销 收藏 举报 申诉 / 21
播放页_导航下方通栏广告

类型专升本数据库练习题及答案.doc

  • 上传人:a199****6536
  • 文档编号:2179746
  • 上传时间:2024-05-22
  • 格式:DOC
  • 页数:21
  • 大小:168.05KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数据库 练习题 答案
    资源描述:
    一.关系代数运算 1.选择 σ (1)查询年龄小于20岁的学生 σsage<20(student) (2)查询学号为201215122的学生 σsno=201215122(student) 2.投影 (1)查询学生姓名,和所在系 same,sdept(student) (2)查询选修了2号课程的学生学号 sno(σcno=‘2’2(student)) SQL语句 学生-课程数据库 学生表:学生(学号,姓名,性别,年龄,所在系) 课程表:课程(课程号,课程名,先行课,学分) 学生选课表:选课(学号,课程号,成绩) 二.创建数据库SQL 1. 创建数据库 Create database 数据库名 On ( name =逻辑文件名, Filename=’物理文件名’, Size=初始文件大小, Maxsize=最大文件大小, Filegrowth=文件自动增量 ) Log on ( name =逻辑文件名, Filename=‘物理文件名’, Size=初始文件大小, Maxsize=最大文件大小, Filegrowth=文件自动增量 ) 例 创建‘教务管理数据库’ Create database 教务管理数据库 On ( name =教务管理_dat, Filename=‘E:\SQL\教务管理_dat.mdf’, Size=2, Filegrowth=1 ) Log on ( name =教务管理.log, Filename=‘E:\SQL\教务管理_log.ldf’, Size=5M, Filegrowth=10% ) 1. 查看数据库属性 1) 使用sp_helpdb查看数据库信息 : sp_helpdb [数据库名] (2)使用sp_databases 查看可使用的数据库信息: sp_databases(显示所有可以使用的数据库名称和大小) (3)使用sp_helpfile查看数据库文件信息 sp_helpfile [文件名] 1. 设置数据库选项 Alter database 数据库名 Set 选项 例 设置 教务管理数据库自动收缩 Alter database 教务管理数据库 Set auto_shrink on (自动收缩) 1. 修改数据库大小 Alter database 数据库名 Add file 增加数据文件 Add log file 增加日志文件 Remove file 删除文件 Modify file 修改文件( ) 例 1.修改教务管理数据库,增加数据文件jwgl_dat1 Alter database 教务管理数据库 Add file ( Name=jwgl_dat1, Filename=‘E:\SQL\jwgl_dat1.ndf’, Size=2MB, Filegrowth=1MB ) 2. 修改教务管理数据库 Alter database 教务管理数据库 Modify file ( Name=jwgl_dat1, Size=5MB ) 2. 删除教务管理数据库中次要数据文件jwgl_dat1 Alter database 教务管理数据库 Remove file jwgl_dat1 1. 数据库更名 1) 更改数据库名 Alter database 数据库名 Modify name = 新数据库名 例 将数据库test更名为mytest Alter database test Modify name = mytest 1) 更改数据库的逻辑文件名 Alter database 数据库名 Modify file( Name=逻辑文件名, Newname=新逻辑文件名 ) 例 将数据库逻辑文件test更名为mytest Alter database mytest Modify file( Name = test, Newname = mytest ) Go Alter database mytest Modify file( Name = test_log, Newname = mytest_log ) 1) 更改数据库的物理文件名 Alter database 数据库名 Modify file( Name=逻辑文件名, Filename =‘新路径\操作系统文件名’ ) 例 将数据库物理文件test更名为mytest Alter database mytest Modify file( Name=mytest, Filename =‘E:\sql\mytest.mdf’ ) GO Alter database mytest Modify file( Name=mytest_log, Filename =‘E:\sql\mytest_log.ldf’ ) 1. 删除数据库 Drop database 数据库名 例 删除数据库名为test和数据库sales Drop database test,sales 1. 数据库分离 Sp_detach_db 数据库名 1. 数据库附加 Create database 数据库名 On ( Filename=‘主文件的物理文件名’ ) For attach 三.基本表操作 1. 创建表 Create table 表名 ( ) 例 创建一个学生表 Create table 学生表 (学号 char(6) primary key, 姓名 char(20) unique, 性别 char(2), 年龄 smallint, 所在系 char(20) ) 1. 修改表 Alter table 表名 Add 列名 数据类型()//增加列 (alter column 列名 数据类型()//对原有的基础上修改列) (drop column 列名 //对原有的基础上删除列,可一次删除多列) 例1. 添加一新列电子邮箱 char型 长度20 Alter table 学生表 Add 电子邮箱 char(20) 例2. 修改学生表列 电子邮箱数据类型长度为22 Alter table 学生表 alter column 电子邮箱 varchar(22) 例3.删除学生表的电子邮箱列 Alter table 学生表 drop column 电子邮箱 3.删除表 Drop table 表名 例 删除学生表 Drop table 学生表 四.数据更新 1. 插入数据 Insert Into 表名 () Values 值() 例1 插入一行数据到学生表的学生 Insert Into 学生表(学号,姓名,性别,年龄,所在系) Values (‘201215126’,‘张成民’,‘男’,18,‘计算机系’) 1. 修改数据 Update 表名 Set 列名=表达式 Where 条件 1) 修改某元祖的值 例 将学生201215121的年龄改为22 Update 学生表 Set 年龄=22 Where 学号=‘201215121‘ 1) 修改多个元祖的值 例 将所有学生年龄增加一岁 Update 学生表 Set 年龄=年龄+1 1) 带子查询的修改语句 例 将计算机科学系全体学生成绩置零 Update 选课表 Set 成绩=0 Where 学号 in (select 学号 From 学生表 Where 所在系=‘计算机科学系’) 1) 修改表名 Sp_rename 旧对象名,新对象名 例 课程表更名为课程信息表 Sp_rename 课程表,课程信息表 3. 删除数据 Delete from 表名 Where 条件 例 将课程信息表中c程序设计课程信息删除 Delete From 课程信息表 Where 课程名=‘c程序设计’ 五.使用约束 1. 非空约束(NOT NULL) 例 创建一个学生表 使姓名,性别 为非空约束 学号为主键 Create table 学生表 (学号 char(6) primary key, 姓名 char(20) NOT NULL, 性别 char(2)NOT NULL, 年龄 smallint, 所在系 char(20) ) 1. 唯一约束(UNIQUE) 例 创建一个学生表 使姓名,性别 为唯一约束 学号为主键 Create table 学生表 (学号 char(6) primary key, 姓名 char(20) UNIQUE, 性别 char(2)UNIQUE, 年龄 smallint, 所在系 char(20) ) 1. Check约束(检查列值是否满足一个条件表达式) 1. 完整性约束命令子句 Constraint 完整性约束条件名(包括非空 主键 唯一 外键 check约束等) 约束条件 例 1创建一个学生表 使性别 只允许为‘男’或‘女’,年龄在20到30之间 Create table 学生表 (学号 char(6) primary key, 姓名 char(20) UNIQUE, 性别 char(2) CHECK((性别=‘男’)or (性别=‘女’)), 年龄 smallint CHECK(年龄between 20 and 30), 所在系 char(20) ) 2 利用T-SQL命令设置课程表中的考核方式只能取值‘考试’或‘考查’,学分的值为1-6之间 Alter table 课程表 with check Add constraint CK_课程表_1 check(考核方式 in (‘考查’,‘考试’)) Alter table 课程表 with nocheck Add constraint CK_课程表_2 check(学分 between 1 and 6) 1. 主键约束(PRIMARY KEY) 例 创建一个学生表 使姓名,性别 为唯一约束 学号为主键 Create table 学生表 (学号 char(6) primary key,(在列定义后设置主键) 姓名 char(20) UNIQUE, 性别 char(2)UNIQUE, 年龄 smallint, 所在系 char(20) ) 1. 外键约束(FOREIGN KEY) Constraint 约束名 FOREIGN KEY(列名) Reference 被引用表(列名) [on delete cascade(级联删除)|on update cascade(级联更新)] 例 创建选课表 设置选课表的课程号为外键 引用课程表 课程号 Create table 选课表 ( 学号 char(6) primary key, 课程号 char(11) Reference 课程表(课程号)on update cascade, 成绩 numeric(5,1) ) 7.默认约束(DEFAULT) Constraint 约束名 DEFAULT 常量表达式 可在创建表中 数据类型后直接加 例 修改课程表 设置考核方式默认值为‘考试’ Alter table 课程表 Add constraint df_课程表_考核 DEFAULT‘考试’)for 考核方式 六.数据查询 1. 单表查询 1) 选择列查询 例 查询全体学生姓名 学号 Select 姓名,学号 From 学生表 1) 查询全部列 例 查询全体学生姓名 学号 Select * From 学生表 1) 查询经过计算的值 例 查询全体学生姓名 及出生年份 Select 姓名,2017-年龄 From 学生表 1) 消除取值重复的行 (distinct) 例 查询选修了课程的学生学号 结果取消重复行 Select distinct 学号 From 学生表 1) 查询满足条件的元祖 (where子句) · 比较大小 (> = < 等) 例 查询选修了课程为‘计算机’的学生学号 结果取消重复行 Select distinct 学号 From 学生表 Where 课程=‘计算机’ · 确定查找范围(between and) 例 查询成绩为80-90的学生学号 结果取消重复行 Select distinct 学号 From 选课表 Where 成绩between 80 and 90 · 确定集合(in) 例 查询成绩为80,90,100的学生学号 结果取消重复行 Select distinct 学号 From 选课表 Where 成绩in(80,90,100) · 字符匹配(like ) %:任意长度的字符串 _(下划线):任意单个字符 例 1查询所有姓刘的学生姓名 学号 结果取消重复行 Select distinct 姓名,学号 From 学生表 Where 姓名 like‘刘%’ 2查询名字中第二个字是阳 学生姓名 学号 结果取消重复行 Select distinct 姓名,学号 From 学生表 Where 姓名 like‘_阳%’ · 空值查询(is null/not null) 例 查询成绩为空的中第二个字是阳 学生姓名 学号 结果取消重复行 Select distinct 姓名,学号 From 学生表 Where 姓名 like‘_阳%’ · 多重条件查询(and or in) 例 查询成绩为80以上的女同学的姓名 学号 结果取消重复行 Select distinct 姓名,学号 From 学生表,选课表 Where 学生表.学号=选课表.学号 And 成绩>=80 AND 性别=‘女’ 6) 设置字段别名(as) 表达式 as 别名 或 字段别名 = 表达式 例 查询学生姓名 性别 年龄 Select 姓名as学生姓名,性别,datediff(year,出生日期,getdate())as年龄 From 学生表 或 Select 学生姓名=姓名,性别,年龄=datediff(year,出生日期,getdate()) From 学生表 2. Order by子句(对查询结果默认升序(asc)降序(desc)) 例 查询选修了3号课程的学生学号 成绩 结果按分数降序排列 Select 成绩,学号 From 选课表 Where 课程号=‘3’ Order by成绩 desc 2. 聚集函数(count 统计个数,sum 求和,avg 求平均数,max 最大数,min 最小数) 只能用于select,group by,having 子句中 不能用于where条件句中 例 查询选修课程号为1的学生最高成绩 Select max(成绩) From 选课表 Where 课程号=‘1’ 2. Group by ...... having子句(功能为分组) 例 1.求各个课程号及相应的选课人数 Select 课程号,count(学号) From 选课表 Group by 课程号 2.查询选修了三门以上课程的学生学号 Select 学号 From 选课表 Group by 学号 having count(*)> 3(having子句作用范围为Group by后) 3.查询平均成绩大于等于90分的学生学号 和平均成绩 Select 学号avg(成绩) From 选课表 Group by 学号 having avg(成绩)>=90 七.多表查询 1. 表连接 用where子句连接两个表 Where 表一.列名(比较运算符>,=,<)表2.列名 例 查询每个学生及选修课程的情况(用到学生表,选课表) Select 学生表.*,选课表.*(如查询的属性在两个表不唯一则不用加表前缀) From 学生表,选课表 where 学生表.学号=选课表.学号 1. 多表连接 例 查询每个学生的学号,姓名,选修的课程名及成绩(用到学生表,课程表选课表) Select 学生表.学号,姓名,课程名,成绩(查询的属性在两个表不唯一则不用加表前缀) From 学生表,课程表,选课表 where 学生表.学号=选课表.学号and 课程表.课程号=选课表.课程号 1. 带in的子查询(嵌套查询) 例 查询与‘刘晨’在同一个系学习的学生的学号,姓名 Select 学号,姓名,系名 From 学生表 Where系名 in ( Select 系名 From 学生表 Where姓名=‘刘晨’) 1. 带比较运算符的子查询(>,<,=,>=,<=,!=) 例 查询与‘刘晨’在同一个系学习的学生的学号,姓名 Select 学号,姓名,系名 From 学生表 Where系名 in ( Select 系名 From 学生表 Where姓名=‘刘晨’) 八.建立索引 1.建立索引 Create [unique(唯一)][clustered ( 聚集 ) ][nonclustered ( 非聚集 )] Index 索引名 On (表/视图)(列名[asc(升序)][desc(降序)]) With [pad_index][fillfactor=填充因子][drop_existing] 例 在学生表上创建一个名为XS XM的非唯一性非聚簇索引 索引关键字为姓名 升序 填充因子为50% Create nonclustered Index XS XM On 学生表(姓名 asc) With fillfactor=50 2. 删除索引 Drop index 表名.索引名 九.视图 1. 定义视图 1) 建立视图 Create view 视图名 列名 As Select (在视图后加上with check option子句 以后对该视图进行增删改时则自动添加) 例 建立信息系学生的视图 Create view 信息系学生 As Select 学号,姓名,年龄 From 学生表 Where 系别=‘信息系’ 1) 删除视图 Drop view 视图名(如选择级联删除 视图名后加cascade) 例 删除视图BT_S和视图IS_S1 Drop view BT_S Drop view IS_S1 (拒绝执行 因为与另一个视图有连接所以 后面加cascade) 2. 查询视图 !同表查询 唯一区别在于from中添加的为视图名! 2. 更新视图(指对视图进行增删改,由于对视图修改最后都归结于对表的修改所以修改视图数据=修改表数据) 函数 1、 标量值 create function 函数名 (@变量 类型) returns 返回值类型 begin return end 例:给专业名求男女比例 CREATE FUNCTION 某专业男女比例 ( @专业名 varchar(20) ) RETURNS numeric(6,2) AS BEGIN declare @man int declare @woman int select @man=count(*) from 学生表,专业表,班级表 where 学生表.学号=班级表.班号 and 班级表.专业=专业表.专业号 and 性别='男'and 专业名=@专业名 select @woman=count(*) from 学生表,专业表,班级表 where 学生表.学号=班级表.班号 and 班级表.专业=专业表.专业号 and 性别='女'and 专业名=@专业名 return cast(@man as float)/cast(@woman as float) END 执行 select dbo.某专业男女比例('数据库') 2、表值函数 给班名和课程名 求某班某课成绩单 CREATE FUNCTION 某班某课成绩单 ( @班名 char(20),@课程名 varchar(20) ) RETURNS TABLE AS RETURN ( select 班名,学生表.学号,姓名,课程名,成绩 from 学生表,课程表,班级表,选课表 where 课程表.课程号=选课表.课程号 and 学生表.学号=选课表.学号 and 学生表.班号=班级表.班号 and 班名=@班名 and 课程名=@课程名 ) GO 执行 select * from dbo.某班某课成绩单('嵌入式班','java程序设计') 3、 CREATE FUNCTION 某班平均函数 ( @班号 char(5) ) RETURNS TABLE AS RETURN ( SELECt 课程号,avg(成绩) 平均成绩 from 选课表,学生表 where 学生表.学号=选课表.学号 and 班号 =@班号 group by 课程号 ) GO 调用 select * from dbo.某班平均函数('1001') 十.存储过程 1.存储过程创建与执行 (1)创建存储过程 Create proc[edure] 存储过程名 [ @参数 数据类型 [output(指明返回参数)] ] As Begin Sql语句[ ] End 说明:存储过程可以带参数 也可不带 参数可以输入 也可输出 例1. 创建“学生名单”存储过程 功能为输出所有学生名单 Create procedure 学生名单 As Begin Select 学号,姓名 From 学生表 End 例2.创建“某班学生名单”存储过程 其功能查看某个班级学生名单 结果按学号排序 Create procedure 某班学生名单 @班名 varchar (20) As Begin Select 学号,姓名 From 学生表,班级表 Where 学生表.班号 = 班级表.班号 and班名=@班名 Order by 学号 End 例3.创建“查询学生”存储过程 功能根据学号查询学生姓名 年龄 Create procedure 查询学生 @学号 char(11),@姓名 nchar(5)output,@年龄 int output As Begin Select @姓名 = 姓名,@年龄=datediff(year,出生日期,getdate()) From 学生表 Where 学号=@学号 End (2)执行存储过程 Execute 存储过程名 @参数=[值] 例1 查看学校学生名单 Execute 学生名单 例2 查看计算机应用071班学生名单 Execute 某班学生名单 @班级=‘计算机应用071班’ 例3 查看学号为“20070101101”的学生 姓名 年龄 declare @姓名 nchar(5) declare @年龄 int exec 查询学生 '15999015',@姓名 output, @年龄 output print @姓名 print @年龄查看存储过程 (1)查看存储过程的定义 Exec sp_helptext “ ” (2)查看存储过程的参数和数据类型信息 Exec sp_help “ ” (3)查看存储过程的依赖关系 Exec sp_depends “ ” 2. 修改存储过程 Alter proc[edure] 存储过程名 [ @参数 数据类型 [output(指明返回参数)] ] As Begin Sql语句[ ] End 例 修改“学生名单”存储过程 结果按学号排序 alter procedure 学生名单 As Begin Select 学号,姓名 From 学生表 Order by 学号 End 2. 删除存储过程 Drop procedure 存储过程名 例 将存储过程“学生名单”删除 Drop procedure 学生名单 十一.触发器 1. 创建触发器 Create trigger 触发器名 On 表名/视图名 { for / after / instead of } { [ insert ] [ update ] [ delete ] 指定表/视图执行哪条语句时激活触发器关键字} As Sql 语句 例1.对学生表创建插入触发器 当有新纪录插入表时 更新班级表中相应班级人数 Create trigger 增加学生 On 学生表 after insert As Begin Set nocount on If update(班级) Begin Update 班级表 Set 学生人数=学生人数+1 From inserted Where 班级表.班号=inserted.班级 End End 例2.对学生表创建删除触发器 当删除一条纪录时 减少班级表中相应班级人数 Create trigger 删除学生 On 学生表 after delete As Begin Set nocount on Begin Update 班级表 Set 学生人数=学生人数-1 From deleted Where 班级表.班号=deleted.班级 End End 例3.对学生表创建更新触发器 当一条纪录被更新时 修改班级表中相应班级人数 Create trigger 更新学生 On 学生表 after update As Begin Set nocount on If update(班级) Begin Update 班级表 Set 学生人数=学生人数-1 From deleted Where 班级表.班号=deleted.班级 End End 1. 查看触发器 (1)查看触发器的定义 Exec sp_helptext “ ” (2)查看触发器的参数和数据类型信息 Exec sp_help “ ” (3)查看触发器的依赖关系 Exec sp_depends “ ” 1. 修改触发器 Alter trigger 触发器名 On 表名/视图名 { for / after / instead of } { [ insert ] [ update ] [ delete ] 指定表/视图执行哪条语句时激活触发器关键字} As Sql 语句 4.删除触发器 Drop trigger 触发器名 例 将触发器“更新学生”删除 Drop trigger 更新学生
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:专升本数据库练习题及答案.doc
    链接地址:https://www.zixin.com.cn/doc/2179746.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork