SQL课堂大作业(答案)
- 格式:doc
- 大小:89.50 KB
- 文档页数:8
SQL数据库完整版答案1、T-SQL语言中,用什么关键字定义局部变量,用什么关键字给变量赋值。
(p52)答:使用DECLARE/declare关键字来定义局部变量;用SET/set 和SELECT/select语句给变量赋值;2、自定义函数有几种?(p211)答:自定义函数有3种:标量值、嵌表值、多语句表值3、局部变量以什么开头?全局变量以开头?答:局部变量是以开头,全局变量是以开头;4、数据完整性包括哪几种?(p179)答:数据完整性包括三种:完体完整性、域完整性、参照完整性;5、MS-SQL数据库常包含哪三类文件?(p116)答:MS-SQL数据库通常包含着:主数据文件(.mdf)、次要数据文件(.ndf)、事务日志文件(.ldf);6、MS-SQL数据控制语言中,使用什么关键字授予权限,使用什么关键字撤销权限?(p95)答:使用GRANT/grant关键字授予权限,使用REVOKE/revoke 关键字撤销权限,使用DENY/deny关键字拒绝用户访问;7、DML触发器中,AFTER触发器和INSTEAD OF触发器有什么区别?(p235)答:(1)AFTER触发器只能在表上定义该类的触发器,并且只有执行INSERT,UPDATE和DELETE操作之后,才会触发;(2)INSTEAD OF触发器该类型触发器不执行INSERT,UPDATE和DELETE操作,而只是执行触发器本身;而且还可以在基于一个或多个基表的视图上定义;8、SQL SERVER中聚焦索引和非聚焦索引有什么区别?(p169)答:聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序,一个表中只能有一个聚集索引非聚集索引:该索引是数据表中行的物理顺序与索引键值的逻辑顺序不相同,仅指向表中数据,可以在表中定义,但其检测效率较低。
作为和数据表分离的对象操作,表中的每一列都有自己的自己的索引。
9、能够激活DML触发器的数据修改语句是使用INSERT\UPDATE\DELETE\SELECT中哪个选项?UPDATE10、数据库备份的类型有哪几种?能够将数据恢复到某个时间点的备份设置是哪个?(P131)答:(1)数据库备份的类型有四种:完整数据备份、差异数据库备份、事务日志备份、文件和文件组备份;(2)能将数据库恢复到某个时间点的备份设置是:事务日志备份;11、SQL SERVER的登录账户信息保存在哪个系统数据库中?(p117)答:用户登录账户信息保存在master系统数据库中;12、语句INSERT SELECT语句有什么作用?(p92)答:(1)INSERT SELECT语句可以完成一次插入一个数据块的功能;(2)INSERT SELECT语句可以把其他数据源的行添加到现有表中;复制表13、T-SQL语言的字符串常量是使用什么符号当作定界符?’’答:字符串常量是使用’’单引号符号当作定界符;14、FOREIGN KEY约束定义了表之间的什么?(p185)答:FOREIGN KEY约束定义对同一个表或另一个表中具有PRIMARY KEY 或UNIQUE约束的列的引用;(另一个答案):FOREIGN KEY约束定义了表之间的一个列或多列组合.15、域约束有哪几种?(p179)答:域约束有:CHECK约束、DEFAULT约束。
sql考试题及答案一、选择题1. SQL是什么意思?a. Structured Query Languageb. Sequential Query Languagec. Structured Question Languaged. Sequential Question Language答案:a. Structured Query Language2. 下列哪个关键词用于在SQL中创建新表?a. UPDATEb. INSERTc. CREATEd. SELECT答案:c. CREATE3. 在SQL中,用于查找符合一定条件的记录的关键词是?a. SELECTb. UPDATEc. INSERTd. DELETE答案:a. SELECT4. 在SQL中,如何在表中添加新的数据?a. INSERT INTOb. ADD INTOc. UPDATEd. MODIFY答案:a. INSERT INTO5. 在SQL中,如何删除表中的数据?a. DELETE ROWb. REMOVEc. DELETE FROMd. ERASE FROM答案:c. DELETE FROM二、填空题1. SQL中用于选择所有列的通配符是______。
答案:*2. SQL中用于指定唯一键的关键词是______。
答案:PRIMARY KEY3. SQL中用于按照某一列对结果进行排序的关键词是______。
答案:ORDER BY4. SQL中用于更新数据的关键词是______。
答案:UPDATE5. SQL中用于计算某一列的总和的函数是______。
答案:SUM三、简答题1. 请解释SQL中的JOIN操作。
答案:JOIN操作用于连接两个或多个表,基于表之间的关联关系获取相关数据。
常用的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
2. 什么是SQL注入?如何防止SQL注入?答案:SQL注入是一种恶意的攻击方式,通过在用户输入的数据中插入恶意的SQL代码,以获取、修改或删除数据库中的数据。
假设每个职工可以在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示E#,MUM,SUM_SALARY分别表示工号、公司数目和工资总数。
分析:涉及到表为works表;按照职工来统计公司的数目和工资总额select E#,count(c#) NUM,sum(salary) SUM_SALARY from works group by E#检索”联华公司”中低于本公司平均公司的职工工号和姓名.(10题2小题)(1)查找联华公司职工的平均工资。
方法一:连接查询实现select avg(salary) from works,comp where works.c#=comp.c# and cname='联华公司'方法二:嵌套查询实现Select avg(salary) from works Where c#=(select c# from comp Where cname='联华公司')------------------------------------5799.5(2)查找联华公司工资低于(1)的职工工号和姓名。
方法一:连接查询实现外层查询select emp.e#,enamefrom emp,works,compwhere emp.e#=works.e#and works.c#=comp.c#and cname='联华公司'and salary<(Select avg(salary) from worksWhere c#=(select c# from compWhere cname='联华公司'))方法二:嵌套查询实现外层查询(自己思考)3、检索工资高于其所在公司职工平均工资的所有职工的工号和姓名。
(1)先查找各公司的平均工资select c#,avg(salary) avg_salfrom worksgroup by c#(2) 检索所有职工的工号、姓名、公司,工资select emp.e#,ename,works.c#,salary,from emp,workswhere emp.e#=works.e#(3) 检索所有职工的工号、姓名、公司,工资,所在公司和平均工资select emp.e#,ename,works.c#,salary,a.c#,a.avg_salfrom emp,works,(select c#,avg(salary) avg_salfrom works group by c#) awhere emp.e#=works.e#and works.c#=a.c#and salary>avg_sal4、检索职工人数最多的公司的编号和名称(10题的4小题).(1)按照公司来统计公司的人数(涉及到works)select c#,count(e#) from worksgroup by c#(2) 从(1)的结果中查找人数最多的公司的人数select max(cont) from (select c#,count(e#) cont from worksgroup by c#) a(3) 根据(2)查询的结果,从(1)的结果中查找人数最多的公司的编号.select c# from (select c#,count(e#) cont from works group by c#) awhere cont=(select max(cont) from (select c#,count(e#) contfrom worksgroup by c#) a)(4)已知公司编号,在COMP表中查找公司编号和名称select c#,cname from compwhere c# in(select c# from (select c#,count(e#) cont from works group by c#) a where cont=(select max(cont) from (select c#,count(e#) contfrom worksgroup by c#) a))5、检索工资总额最小的公司的编号和名称。
以下为SQL查询练习参考答案(查询用到的表参照教材P82)。
1.查询全体学生的姓名和所在系。
Select Sno,SdeptFrom Student;2.查询所有课程的详细信息。
Select *From Course;或者Select Cno,Cname,Cpno,CcreditFrom Course;3.查询选修了课程的学生学号。
Select Distinct SnoFrom SC;注意:select子句中需要指定Distinct 关键词4.查询有学生选修的课程号。
Select Distinct CnoFrom SC;5.检索年龄在 18到 20之间(含18和20)的女生的学号、姓名及年龄。
Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage between 18 and 20);注意: where子句性别的常量值——女,需用英文状态下的单引号或双引号。
或者Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage >=18 and Sage<= 20);6.检索“200215121”学生选修课程号及成绩。
Select Cno,GradeFrom SCWhere Sno=’200215121’;7.检索选修了“1”号或“3”号课程的学生学号、课程号及成绩。
Select *From SCWhere Cno=’1’ or Cno=’3’;注意: where子句若用Cno=’1’ or ’3’是错误的,or连接的是两个布尔表达式。
8.检索所有姓王的同学的姓名、性别和所在系。
Select Sname,Ssex,SdeptFrom StudentWhere Sname like ’王*’;注意: Access中的通配符为’*’ 和’?’标。
准SQL中的通配符为’%’ 和’_’9.检索课程名中包括“数据库”的课程详细信息,结果按学分降序排列。
《SQL数据库》大作业一、单项选择题(在每小题的四个备选答案中,有且仅有一个正确答案,请将正确答案的代号写在题干后的括号内。
答案选错或未选者,该题不得分。
每小题2分,共20分)1、一个仓库可以存放多种产品,一种产品只能存放于一个仓库中。
仓库与产品之间的联系类型是(C)。
A、一对一的联系B、多对一的联系C、一对多的联系D、多对多的联系2、在职工表中,要查询部门10的所有职工信息,这种关系操作是(A)。
A、选择操作B、投影操作C、连接操作D、并操作3、在E-R模型转换成关系模型的过程中,下列叙述不正确的是(B)。
A.每个实体类型转换成一个关系模式B.每个M∶N联系类型转换一个关系模式C.每个联系类型转换成一个关系模式D.在处理1∶1和1∶N联系类型时,不生成新的关系模式。
4、在S Q L S e r v e r数据库文件中,日志文件的后缀名是(A)。
A、ld fB、lo gC、m d fD、n d f5、在S Q L语句中的授权语句中,如果带有下面的(D)子句,则被授权的用户可以将自己所获得的权限再授权给其他用户。
A、W I T H CRE AT E O P T I O NB、W I T H AD MI N O P T I O NC、W I T H C HE C K O P T I O ND、W I T H G R AN T O P T I O N6、如果表中一列未指定缺省值时,为该表增加一条记录,但没有指定该列值,那么插入到数据库中的值是(C)。
A、0B、空格C、N UL LD、任意符合要求的值7、当向某个表插入一条记录时,如果该记录在某一个唯一索引列上的值为空,并且在表中该索引列上不存在空值的记录,那么将发生的情况是(A)。
A、出错,操作失败B、操作成功C、操作成功,但要给出警告信息D、将新记录的主键值更改为一个没有重复的值后插入,操作成功8、与模式串:‘_[^a-d]%’匹配的字符串是(A)。
SQL试题及答案一、选择题1. 以下哪个SQL语句用于创建数据库?A. CREATE DATABASEB. CREATE TABLEC. CREATE INDEXD. CREATE VIEW答案:A2. 在SQL中,以下哪个操作符用于比较两个值是否相等?A. =B. ==C. ===D. !=答案:A3. 以下哪个SQL语句用于从数据库中删除表?A. DROP TABLEB. DELETE TABLEC. DROP DATABASED. DELETE DATABASE答案:A二、填空题1. 在SQL中,用来查询数据库中表的记录的语句是__________。
答案:SELECT2. 在SQL中,用来插入新记录到表的语句是__________。
答案:INSERT INTO3. 在SQL中,用来更新表中现有记录的语句是__________。
答案:UPDATE三、简答题1. 简述SQL中的主键(Primary Key)和外键(Foreign Key)的概念。
答案:主键是表中一个或多个列的组合,用于唯一标识表中的每条记录。
一个表只能有一个主键,且主键列的值不能为空或重复。
外键是一个表中的一个列或列组合,它是另一个表的主键。
外键用于建立两个表之间的关系,确保数据的完整性。
2. 请解释SQL中的INNER JOIN和LEFT JOIN的区别。
答案:INNER JOIN(内连接)返回两个表中有匹配的记录。
如果没有匹配的记录,则不会返回任何结果。
LEFT JOIN(左连接)返回左表中的所有记录,即使右表中没有匹配的记录。
如果左表中的记录在右表中没有匹配,则结果集中右表的列将以NULL填充。
四、编程题1. 编写一个SQL查询,从“员工”表中查询所有员工的名字和部门名称,假设“员工”表有“员工ID”、“姓名”和“部门ID”列,而“部门”表有“部门ID”和“部门名称”列。
答案:```sqlSELECT 员工.姓名, 部门.部门名称FROM 员工INNER JOIN 部门 ON 员工.部门ID = 部门.部门ID;```2. 编写一个SQL查询,更新“订单”表中所有订单的价格,使其价格上涨10%。
1、设有以下三个关系:学生关系:student(sno,sname,dep,age,sex)选课关系:sc(sno,cno,grade)课程关系:course(cno,cname,score)1)建数据库,在数据库中建立以上三个关系。
要求:学生关系中:sno为主键,sname不允许为空,age默认值18,sex取值范围’男’、’女’、默认为’男’。
课程关系中:cno为主键,cname不为空,在cname上建立唯一索引。
选课关系中:sno、cno组合为主键,grade允许为空,sno为外键(参照学生关系的sno,级联删除、级联修改),cno为外键(参照课程关系的cno,限制删除、限制修改)。
2)试用SQL的查询语句表示下列查询。
(1)检索学分score等于4的所有课程的课程号和课程名。
select cno,cnamefrom coursewhere score=4;(2)检索年龄在20和23岁之间的学生的学号与姓名。
select sno,snamefrom studentwhere age between 20 and 23 ;(3)检索Wang同学不学的课程的课程号。
select cnofrom coursewhere cno not in(select cnofrom sc,studentwhere sc.sno =student.snoand student.sname='Wang');(4)检索所有姓李的学生情况。
select *from studentwhere sname like '李%';(5)检索所有学生情况及其选课情况。
(可以用f1键查看左外联接)select student.*,sc.*from student left outer join scon student.sno = sc.sno;(6)检索所有选修了课程的学生情况和选课情况。
select student.*,sc.*from student , scwhere student.sno = sc.sno;(7)检索至少选修两门课程的学生学号和姓名。
结构化查询语言SQL习题与答案篇一:结构化查询语言SQL习题与答案一、选择题1. 在SQL包含的功能中,最重要的功能是_______。
A) 数据查询 B) 数据操纵 C) 数据定义 D) 数据控制2. 使用SQL语言有两种方式,它们是_______。
A) 菜单式和交互式B) 嵌入式和程序式C) 交互式和嵌入式D) 命令式和解释式3. SQL的全部功能可以用9个动词概括,其中动词INSERT是属于下列______功能。
A) 数据查询 B) 数据操纵 C) 数据定义 D) 数据控制4. SQL语言支持数据库的三级模式结构,其中模式对应于______。
A) 存储文件 B) 视图 C) 基本表 D) 视图和基本表5. 在创建数据表时,可以给字段规定NULL或NOT NULL值,NULL值的含义是______。
A) 0B) 空格 C) NULL D) 不确定6. 在SQL的ALTER语句中,用于删除字段的子句是______。
A) ALTER B) DELETE C) DROP D) MODIFY7. SQL中的INSERT语句可以用于______。
A) 插入一条记录 B) 插入一个字段C) 插入一个索引 D) 插入一个表8. 下列描述错误的是______。
A)用INSERT-SQL语句可以插入一条记录B)用INSERT-SQL语句可以插入多条记录C)使用INSERT-SQL语句可以插入记录的部分数据D)使用INSERT-SQL语句插入记录时列名的排列顺序必须与表定义时的顺序一致9. INSERT-SQL语句中所使用的数据不能来自于______。
A) 数组 B) 变量 C) 查询 D) 索引10. SQL中的UPDATE语句可以用于______。
A) 更新数据表的结构 B) 更新数据表的值C) 更新索引D) 更新查询11. 下列描述错误的是______。
A) SQL中的UPDATE语句可以修改一条记录B)SQL中的UPDATE语句可以修改多条记录C)SQL中的UPDATE语句可以用子查询提供要修改的值D)SQL中的UPDATE语句可以修改子查询的结果12. SQL中的DELETE语句可以用于______。
假设有如下4个样表student(学号,姓名,性别,出生日期,班级) teacher(教工号,姓名,性别,出生日期,职称,所在系) course(课程号, 课程名,教工号) score(学号,课程号,成绩)1、查询学生信息表中所有的姓名、性别和班级select sname,sex,class from student2、查询成绩表中成绩在60到80之间的所有记录select * from score where degree between 60 and 803、查询学生信息表中‘95031’班的学生或性别为‘女’的学生记录select * from student where class=95031 or sex='女'4、以班级降序显示学生信息表的所有记录select * from student order by class desc5、以课程号升序、成绩降序显示成绩表的所有记录select * from score order by cno asc , degree desc6、查询‘95031’班的学生人数select count(sno) 人数 from student where class=950317、查询成绩表中的最高分的学生的学号,课程号select sno,cno from score where degree=(select max(degree) from score)8、查询成绩表中课程号为‘3-105’的平均分*/select avg(degree) 平均成绩 from score where cno='3-105'9、显示成绩表中至少有5名学生选修的并以3开头的课程号的平均分数select avg(degree) 平均分数 from score where cno like '3%' group by cno having count(sno)>=510、列出95033班和95031班全体学生的记录select * from student where class in('95031','95033')11、显示所有学生的姓名、课程号和成绩select sname,cno,degree from student,score where student.sno=score.sno12、列出所有同学的姓名、课程名和成绩select sname,cname,degree from student,score,course where student.sno=score.sno and o=o13、显示'张旭'教师任课的学生成绩select student.sno, sname,degree from student,scorewhere student.sno=score.sno and cno in(select cno from coursewhere tno in (select tno from teacher where name='张旭' ) )14、列出存在有85分以上成绩的课程号select distinct cno from score where degree in (select degree from score where degree>85)15、列出最高分同学的学号、课程号和成绩*/select * from score where sno=(select sno from score where degree=(select max(degree) from score))16、列出所有未讲课的教师的姓名和系别select name,depart from teacher where not exists (select * from course where course.tno=teacher.tno)17、列出成绩比该课程平均成绩低的同学的成绩表select * from score x where degree<(select avg(degree) from score y where o=o)18、列出所有选修‘计算机导论’课程的‘男’同学的成绩表select student.sno,sname,degreefrom score,studentwhere student.sno=Score.sno and cno=( select cnofrom coursewhere cname='计算机导论' )and sex='男'第三章习题5.试用SQL语言完成以下各项操作:四个关系模式:S(SNO,SNAME,STATUS,CITY)P(PNO,PNAME,COLOR,WEIGHT)J(JNO,JNAME,CITY)SPJ(SNO,PNO,JNO,QTY)(1) 找出所有供应商的姓名和所在城市。
SQL查询语言练习题目:一、请你首先建立下面的四张表:Teacher表Course表1.查询student表所记录的name,sex,class列select sname,ssex,classfrom student2.显示教师工作的单位(不许重复)select distinct departfrom teacher3.以汉字属性显示student表所有记录select sno '学号',sname '姓名',ssex '性别',sbirthday '出生日期',class '班级' from student4.查询成绩在60到80之间的同学姓名select snamefrom student,scorewhere student.sno=score.sno and degree between 60 and 805.查询成绩为80,85,或88的记录select *from scorewhere degree in (80,85,88)6.查询‘95031’班或者性别为‘女’的同学记录select *from studentwhere class='95031' or ssex='女'7.以“班级”降序显示student中的记录select *from studentorder by class desc8.以cno升序、degree降序显示score中的记录select *from scoreorder by cno ,degree desc9.显示‘95031’班中的学生人数select count(*)from studentwhere class='95031'10.显示score表中分数最高的学生的学号和课程号select top 1 sno,cnofrom scoreorder by degree descselect sno,cnofrom scorewhere degree=(select max(degree)from score)11.显示‘3-105’号课程的平均分数select avg(degree)from scorewhere cno='3-105'12.显示至少有5名学生选修的并以‘3’开头的课程号的平均分数select cno,avg(degree)from scorewhere cno like '3%'group by cnohaving count(sno)>=513.显示最低分数大于70,最高分数低于90的no列select distinct snofrom score as s1where 70<(select min(degree)from score as s2where s1.sno=s2.sno)and90>(select max(degree)from score as s3where s1.sno=s3.sno)14.查询学生的姓名、所学的课程号以及该课程的成绩select sname,cno,degreefrom student,scorewhere student.sno=score.sno15.查询95033班所选课程的平均分数select avg(degree)from student,scorewhere student.sno=score.sno and class='95033'16.显示选修3-105课程的成绩高于109号同学成绩的所有同学的记录select *from scorewhere cno='3-105' and degree>(select degreefrom scorewhere cno='3-105' and sno='109')17.查询选修多门课程的同学中分数为非最高成绩的记录select *from scorewhere degree<>(select max(degree)from score )and sno in(select snofrom scoregroup by snohaving count(cno)>1)18.查询成绩高于学号为‘109’号、课程号为‘3-105’的成绩的所有记录select *from scorewhere degree >(select degreefrom scorewhere sno='109' and cno='3-105')19.查询和学号为108的同学同年出生的所有学生的no,name,birthday 列select sno,sname,sbirthdayfrom studentwhere year(sbirthday)=(select year(sbirthday)from studentwhere sno='108')20.显示“张旭”老师任课的学生姓名和成绩select sname,degreefrom student,teacher,score,coursewhere student.sno=score.sno and o=o and teacher.tno=course.tno and tname='张旭'21.显示选修某课程的同学人数多余5人的教师姓名select tnamefrom teacher ,coursewhere teacher.tno=course.tnoand cno in(select cnofrom scoregroup by cnohaving count(sno)>5)22.显示95033班和95031班全体学生的记录select *from studentwhere class='95033' or class='95031'23.查询存在有85分以上的成绩的课程号select distinct cnofrom scorewhere degree>8524.查询“计算机系”教师所教课程的成绩表select *from scorewhere cno in(select cnofrom coursewhere tno in(select tnofrom teacherwhere depart='计算机系'))25.查询“计算机系”与“电子工程系”不同职称的教师的name和prof select tno,proffrom teacherwhere prof not in(select proffrom teacherwhere depart='计算机系' or depart='电子工程系')26.查询选修课编号是“3-105”课程且成绩至少高于选修课程编号为“3-245”的同学的cno,no和degree,并且degree从高到低次序排列select*from score s1where cno='3-105'and degree>(select degreefrom score s2where cno='3-245'and s1.sno=s2.sno)27.在屏幕上列出选修编号为“3-105”并且成绩高于选修课程编号为“3-245”课程的同学的cno,no,degree28.查询成绩比该课程平均成绩低的同学的成绩表select*from score s1where degree<(select avg(degree)from score s2where o=o)29.查询所有未讲课的教师的name和departselect*from teacherwhere tno not in(select tnofrom course)30.查询至少有2名男生的班级号码select classfrom studentwhere ssex='男'group by classhaving count(*)>=231.查询不姓“王”的同学记录select*from studentwhere sname not like'王%'32.查询每个学生的姓名和年龄select sname ,year(getdate())-year(sbirthday)from student33.查询最大和最小生日值及其姓名34.以班号和年龄从大到小的顺序查询student中的所有信息35.查询男老师及其所上的课程名称36.查询平均成绩最低的学生姓名及其平均成绩37.查询和“李军”同性别的所有学生的姓名38.查询和“李军”同性别但是并不同班的所有学生的姓名39.查询所有选修“计算机导论”的男学生成绩表二、请你首先将《数据库系统概论》一书第80页的表建成,然后完成下面的练习1.查询所在城市为上海的所有工程全部信息2.取出重量最轻的零件代号3.查出为工程J1提供零件的供应商代号4.查出为工程J1提供零件P1的供应商代号5.查询由供应商S1提供零件的工程名称6.查询供应商S1提供的零件的颜色7.查询为工程J1或J2提供零件的供应商代号8.查询为工程J1提供红色零件的供应商代号9.查询为所在城市为上海的工程提供零件的供应商代号10.查询为所在城市为上海或北京的工程提供红色零件的供应商代号11.查询供应商与工程所在城市相同的供应商提供的零件代号12.查询上海的供应商提供给上海的任一工程的零件代号13.查询至少由一个和工程不在同一个城市的供应商提供零件的工程代号14.查询上海供应商不提供任何零件的工程的代号15.查询这样一些供应商的代号,他们能够提供至少一种由红色零件的供应商提供的零件16.查询由供应商S1提供零件的工程代号。