SQL数据库填空题 求大神

SQL数据库填空题 求大神,第1张

1、数据库管理技术经历了____人工管理___ ____文件管理______ __数据库系统___ 三个阶段

2 .关系模型有 ___实体完整性____,___参照完整性____ ,____用户定义的完整性___ 三类完整性。

4、SQL SERVER 中的编程语言就是________________PL/SQL_____________语言。

5、PL/SQL 有两种类型的游标:___显式游标____ 和____显式游标___ 。

6、DBMS通常提供授权功能来控制不同的用户访问数据库中数据的权限,其目的是为了数据库的_____安全性____

你还有马甲。。。

第一个不对,更新的是学生的成绩,而不是c001得成绩

1对选修了课程号为c001的学生成绩提高10%

此题本人做的答案请检查:updata 选课表 set 成绩=成绩11 where 课程号='c001'

UPDATE 选课表 SET set 成绩=成绩11 WHERE 学生号 IN (SELECT 学生号 FROM 选课表 WHERE 课程号='c001')

2查询没有学生选修的课程名。

此题本人做的答案请检查:select 课程名 from 课程 where 课程名 not exists(select from 选课表 where 选课表课程号=课程表课程号)

SELECT 课程名 from 课程 WHERE 课程号 NOT IN (SELECT DISTINCT 课程号 FROM 选课表)

3 correct

4查询每个学生选修的门数及平均成绩。

此题本人做的答案请检查:select AVG(成绩),姓名 from 学生,选课 where 学生学生号=选课学生号 group by 姓名

SELECT COUNT(c课程号), AVG(c成绩)

FROM 学生 stu LEFT JOIN 选课 c ON stu学生号 = c学生号

GROUP BY stu学生号

5查询2003年以前借书的读者借书证号,姓名和单位。

此题本人做的答案请检查:select 借书证号,姓名,单位 from 读者 where 借书日期<=2003 and 读者借书证号=借书借书证号

SELECT 借书证号,姓名,单位 FROM 读者 WHERE IN (SELECT 借书证号 FROM 借书 WHERE 借书日期<=2003)

6查询电子系没有借书的读者姓名

此题本人做的答案请检查: select 姓名,职称 from 读者 where 职称='电子系' and 借书证号 NOT exists(select 借书证号 from 借书 where 读者借书证号=借书借书证号)

此题我一直有一个疑惑 我目前查询电子系没有借书的读者姓名 没有借书 也就是借书证号为空或NULL 那么读者也有一个借书证号 借书也有一个借书证号 2个是相对应的,

但是我没用到借书表 只有了读者表的借书证号 需要在where语句后写入:借书证号=借书借书证号 这个条件吗?

SELECT 姓名

FROM 读者 t

WHERE 单位 = '电子系' AND NOT EXISTS(SELECT 1 FROM 借书 WHERE 借书证号 = t借书证号)

7查询出至少有两名学生所选修的全部课程。

此题我做的不怎么好:select 姓名 from 学生 where 课程名 in (select 课程名,count() as 课程数 group by 姓名 having count()>=2

SELECT FROM 课程 WHERE 课程号 IN (SELECT 课程号 FROM 选课 GROUP BY 课程号 HAVING COUNT() >=2)

8

@a, @b, @c是参数, 譬如@a = '123', @b = 'c001', @c = 90

然后begin后面是执行一个update *** 作,将参数对应起来就可以了。

真个存储过程对例子要做的就是

UPDATE 选课

set 成绩=90

where 学号= 123 and 课程号='c001'

明白了么

--类型表,用来存储题目的类型

create table Types

(

[ID] int primary key identity,

[QuestionType] nvarchar(20) not null

)

--选项表,用来存储各种选项

create table Options

(

[ID] int primary key identity,

[OptionContent] nvarchar(200) not null

)

--题目表,用来存储各种问题

create table Questions

(

[ID] int primary key identity,

[QuestionContent] nvarchar(200) not null,--题目

[OptionAID] int references Options(ID) not null,--选项A,引用选项表

[OptionBID] int references Options(ID) not null,--选项B,引用选项表

[OptionCID] int references Options(ID) not null,--选项C,引用选项表

[OptionDID] int references Options(ID) not null,--选项D,引用选项表

[AnswerID] int references Options(ID) not null,--正确答案,,引用选项表,用于评分

[TypeID] int references Types(ID) not null--题目种类,引用类型表,用于确定题目类型

)

这样三张表的话,可扩展性比较强,比如以后增加了试题类型,只要在Types表中新增一条记录就可以了,同理Options表也是很好扩展的

希望可以帮到你

这是在一个student数据库上建立的查询,你可以把邮箱告诉我,我把数据库文件发给你,当然如果你想自己建的话也行,下面是三张表。

sno sname ssex sage sdept

200215121 李勇 男 20 CS

200215122 刘晨 女 19 CS

200215123 王敏 女 18 MA

200215125 张立 男 19 IS

cno cname cpno ccredit

1 数据库 5 4

2 数学 NULL 2

3 信息系统 1 4

4 *** 作系统 6 3

5 数据结构 7 4

6 数据处理 NULL 2

7 PASCAL语言 6 4

sno cno grade

200215121 1 92

200215121 2 85

200215121 3 88

200215122 2 90

200215122 3 80

--1查询所有年龄在20岁以下的学生姓名及其年龄。

select sname,sage

from student

where sage<20

--2查询考试成绩有不及格的学生的学号。

select sno

from sc

where grade<60

--3查询年龄不在19~22岁之间的学生姓名、系别和年龄。

select sname,sdept,sage

from student

where sage not between 19 and 22

--4查询既不是信息系,也不是计算机科学系的学生的姓名和性别。

select sname,ssex

from student

where sdept not in ('IS','CS')

--5查询所有姓刘学生的姓名、学号和性别

select sname,sno,ssex

from student

where sname like '刘%'

--6在Course数据表中添加记录('8','DB_design','2',4),并查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况

select

from course

where cname like 'DB\_%i__%' escape'\'

--7在SC数据表中添加记录('200215123','1',null),并查询所有有成绩的学生学号和课程号

select sno,cno

from sc

--8查询全体学生情况,查询结果按所在系的系号降序排列,同一系中的学生按年龄升序

select

from student

order by sdept desc,sage asc

--9计算2号课程的学生平均成绩。

select AVG(grade)

from sc

where cno='2'

--10在SC数据表中添加记录('200215123','1',23),统计出不及格的同学学号和不及格的门数。

select studentsno,count(grade)

from sc,student

group by studentsno

having grade<60

--11查询选修1号课程的学生最高分数。

select MAX(grade)

from sc

where cno='1'

--12查询学生200215121选修课程的总学分数。

select SUM(grade)

from sc

where sno='200215121'

--13求各个课程号及相应的选课人数

select cno,COUNT(sno)

from sc

group by cno

--14查询选修了2门以上(包括2门)课程的学生学号

select sno

from sc

group by sno

having count()>=2

--15查询成绩大于等于90分的学生的学号和姓名

select studentsno,sname

from student,sc

where grade>90

--16查询选修了“数据库”课程的学生的学号和姓名

select studentsno,sname

from student inner join sc on studentsno=scsno

where cno=(select cno from course where cname='数据库')

--17查询选修了3号课程且成绩高于此课程平均成绩的学号和成绩

select studentsno,grade

from student inner join sc on studentsno=scsno

where cno='3'

and grade>(select AVG(grade) from sc)

--18查询没有选修1号课程的学生姓名。

select sname

from student,sc

where cno!='1'

--1建立计算机系选修了2号课程的学生视图V1

create view v1

as

select sno,sname,ssex,sage,sdept

from student,course

where sdept='cs' and cno='2'

--2建立信息系选修了1号课程且成绩在90分以上的学生的视图V2

create view v2

as

select studentsno,sname,ssex,sage,sdept

from student,course,sc

where coursecno='2' and grade>90

--3将每门课程的课程号和平均成绩定义为一个视图V3

create view v3(cno,avg_grade)

as

select cno,avg(grade)

from sc

group by cno

--三、创建和执行下列存储过程:

--o 创建语句格式:

--n CREATE Proc[edure] 存储过程名

--[{@参数名 数据类型}[=default][output]]

--As

--Sql语句[…n]

--o 执行语句格式:

--n [exec[ute]] 存储过程名[实参[,output][,…n]

--1查询计算机系学生的考试成绩,列出学生的姓名、课程名和成绩。

select sname,cno,grade

from student,sc

where sdept='cs'

--2查询某个指定系学生的考试成绩,列出学生的姓名、所在系、课程名和成绩。

select sname,sdept,cname,grade

from student,sc,course

where sdept='%'

--3查询某个学生某门课程的考试成绩,列出学生的姓名、课程名和成绩。

select sname,cno,grade

from student,sc

where sname='%' and cname='%'

--4查询某个学生某门课程的考试成绩,若没有指定课程,则默认课程为“数据库基础”。

select sname,cno,grade

from student,sc

where sname='%' and cname='%'

--5统计指定课程的平均成绩,并将统计的结果用输出参数返回。

--6创建带删除数据的存储过程,要求删除考试成绩不及格学生的修课记录。

--7创建带修改数据的存储过程,要求将指定的课程的学分增加2分。

create table 学生表

(

学号 char(10) primary key,

姓名 char(10),

年龄 int,

性别 char(2) check (sex IN ('男','女')),

家庭住址 char(40),

联系 char(20)

)

--基础题

--1查询读者最喜爱的3种图书分类号,即借阅表中出现最多的3类图书分类号

SELECT TOP 3 [分类号] FROM [图书] JOIN [借阅] ON [图书][图书编号]=[借阅][图书编号]

GROUP BY [分类号] ORDER BY COUNT() DESC

--附加题

--1查询小于20岁的读者最喜欢的3类图书

SELECT TOP 3 [书名] FROM [读者] JOIN [借阅] ON [读者][借书证号]=[借阅][借书证号]

JOIN [图书] ON [图书][图书编号]=[借阅][图书编号]

WHERE [年龄]<20 GROUP BY [书名] ORDER BY COUNT() DESC

--2查询至少借阅了 宁静 所借图书(书名相同)的人的姓名

SELECT [姓名] FROM [读者] WHERE [姓名]<>'宁静' AND [借书证号] IN(SELECT [借书证号] FROM [借阅]

WHERE [图书编号] IN(SELECT [图书编号] FROM [读者] JOIN [借阅] ON [读者][借书证号]=[借阅][借书证号] WHERE [姓名]='宁静'))

--3查询借阅了多于3本书且每本书价均高于60的读者的借书证号

SELECT [借书证号]

FROM [借阅] JOIN [图书] ON [图书][图书编号]=[借阅][图书编号]

WHERE [单价]>60 GROUP BY [借书证号] HAVING COUNT()>3

GO

--4假定读者表中所有人姓名均不多于4个汉字,请建立一个查询语句,要求根据名字中任意1个或两个或3个或4个汉字,即可找到该读者的详细信息(即完全模糊查询)

CREATE PROCEDURE CX

@XM VARCHAR(8) AS

IF LEN(@XM)=1 SELECT FROM [读者] WHERE @XM LIKE '['+RTRIM([姓名])+']'

ELSE IF LEN(@XM)=2 SELECT FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'

ELSE IF LEN(@XM)=3 SELECT FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'

ELSE IF LEN(@XM)=4 SELECT FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,3,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'

GO

--1分别查询学生表和学生修课表中的全部数据。

SELECT FROM student--查询学生表

SELECT FROM course--查询课程表

--2查询成绩在70到80分之间的学生的学号、课程号和成绩。

SELECT Sno 学号,Cno 课程号,Grade 成绩

FROM SC

WHERE Grade BETWEEN 70 AND 80

--3.查询C01号课程成绩最高的分数

SELECT TOP 1 Grade

FROM SC

WHERE Cno='C01'

ORDER BY Grade DESC--降序DESC,升序ASC

--4查询学生都选修了哪些课程,要求列出课程号。

SELECT Cname AS 学生选修的课程,Cno AS 课程号

FROM course

WHERE Cno IN(SELECT DISTINCT Cno FROM SC)--DISTINCT用来去除重复

--5查询Northwind数据库中orders表的OrderID、CustomerID和OrderDate,

--并将最新的定购日期(OrderDate)列在前边。

USE Northwind

GO

SELECT OrderID,CustomerID,OrderDate

FROM orders

ORDER BY OrderDate DESC--降序DESC,升序ASC

--6查询Northwind数据库中orders表的ShipCountry列以B,C,D,F --//ShipCountry BCDF

--开始且第三个字符为"a"的OrderID、CustomerID和ShipCountry的信息。//OrderID、CustomerID第三个字符为"a"

USE Northwind

GO

SELECT OrderID,CustomerID,ShipCountry FROM orders

WHERE ShipCountry LIKE '[BCDF]_a%'--_下划线表示任意一个字符,%表示一个或多个字符

--7查询Northwind数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个字

--母是"a"的OrderID、CustomerID和ShipCountry的信息。

USE Northwind

GO

SELECT OrderID,CustomerID,ShipCountry

FROM orders

WHERE ShipCountry LIKE '[^ABCDEF]%a'

--8查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。

SELECT AVG(Grade) 平均成绩,MAX(Grade) 最高成绩,MIN(Grade) 最低成绩

FROM SC

WHERE Cno='C02'

--9统计每个系的学生人数。

SELECT Sdept 系别,COUNT() 人数

FROM student

WHERE Sdept IN(SELECT DISTINCT Sdept FROM student)

GROUP BY Sdept

--10统计每门课程的修课人数和考试最高分。

SELECT Cname 课程名,COUNT() 修课人数,MAX(Grade) 考试最高分

FROM SC,course

WHERE SCCno IN(SELECT DISTINCT Cno FROM SC ) AND courseCno=SCCno

GROUP BY courseCname

--11统计每个学生的选课门数,并按选课门数的递增顺序显示结果。

SELECT studentSname 学生姓名,studentSno 学生学号,COUNT(SCSno) 选课门数

FROM student

inner join SC ON SCSno=studentSno

GROUP BY studentSname,studentSno

ORDER BY COUNT(SCSno) ASC

--12统计选修课的学生总数和考试的平均成绩。

SELECT COUNT(DISTINCT(Sno)) AS 学生总数,AVG(Grade) AS 平均成绩

FROM SC --//用DISTINCT消除重复的行

--13查询选课门数超过2门的学生的平均成绩和选课门数。

SELECT StudentSname,AVG(ScGrade) 平均成绩,COUNT(SCSno) 选课门数

FROM SC

--内联接join或inner join,内联系是比较运算符,只返回符合条件的行

JOIN Student ON (SCSno = StudentSno)

JOIN Course ON (SCCno = CourseCno)

GROUP BY StudentSname

HAVING COUNT(distinct CourseCno) >2--分组条件

--14列出总成绩超过200分的学生,要求列出学号、总成绩。

SELECT Sno 学号,SUM(Grade) 总成绩

FROM SC

GROUP BY Sno

HAVING SUM(Grade)>200

--15查询pubs数据库的titles表中每类图书的平均价格超过120元的书的类型(Type)、

--平均价格和最高价格。

USE pubs

GO

SELECT Type AS 书的类型,AVG(price) AS 平均价格,MAX(price) AS 最高价格

FROM titles

GROUP BY Type

HAVING AVG(price)>120

--16查询pubs数据库的titles表中每类图书中图书的数目超过3本的图书的总价格。

USE pubs

GO

SELECT 图书类型=Type,图书的数目=count(Type),图书的总价格=SUM(price)

FROM titles

GROUP BY Type

HAVING count(Type)>3

--17查询选修了c02号课程的学生的姓名和所在系。

SELECT Sname 学生姓名,Sdept 所在系,SCCno AS 选修课程

FROM student

inner join SC ON studentSno=SCSno

WHERE SCCno='C02'

--18查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

SELECT Sname 学生姓名,SCCno 课程号,SCGrade 成绩

FROM student

inner join SC ON studentSno=SCSno--内连接表SC查询

WHERE SCGrade>80

ORDER BY SCGrade DESC

--19查询计算机系男生修了"数据库基础"的学生的姓名、性别、成绩。

SELECT Sname 姓名,Ssex 性别,SCGrade 成绩

FROM student

inner join SC ON Cno IN(SELECT Cno FROM course WHERE Cname='数据库基础') --显示成绩的条件

AND studentSno=SCSno --显示成绩的学生的学号

WHERE Sdept='计算机系' AND Ssex='男'

--20查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。

--这题使用到了表的自连接,所以需要给表取两个别名,如A和B

SELECT ASname 年龄相同的学生的姓名,ASage 年龄

FROM student A

inner join student B ON ASage IN(SELECT Sage FROM student WHERE ASage=BSage AND ASname!=BSname)

GROUP BY ASname,ASage

ORDER BY ASage

--21查询哪些课程没有人选,要求列出课程号和课程名。

SELECT Cno AS 课程号,Cname AS 课程名

FROM course

WHERE Cno NOT IN(SELECT DISTINCT SCCno FROM SC)

--22查询有考试成绩的所有学生的姓名、修课名称及考试成绩

--要求将查询结果放在一张新的永久表(假设新表名为new-sc)中。

SELECT studentSname AS 有考试成绩的学生的姓名,courseCname AS 修课名称,SCGrade AS 考试成绩

INTO [new_sc] --将查询结果放入新表new_sc中

FROM student,course,SC

WHERE SCGrade IS NOT NULL AND studentSno=SCSno AND courseCno=SCCno

--23分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,

--并要求将这两个查询结果合并成一个结果集,

--并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。

--//此题用到了并union查询

SELECT Sdept 系名,Sname 姓名,Ssex 性别,courseCname 修课名称,SCGrade 修课成绩

FROM student

inner join SC ON studentSno=SCSno

inner join course ON courseCno=SCCno

WHERE Sdept='信息系'

UNION

SELECT Sdept 系名,Sname 姓名,Ssex 性别,courseCname 修课名称,SCGrade 修课成绩

FROM student

inner join SC ON studentSno=SCSno

inner join course ON courseCno=SCCno

WHERE Sdept='计算机系'

select sdept, sname,ssex,cname,grade from student,sc,course

where studentsno=scsno and sccno=coursecno and (sdept='信息系' or sdept='计算机系')

--24用子查询实现如下查询:

--(1) 查询选修了C01号课程的学生的姓名和所在系。

SELECT Sname AS 选修了C01号课程的学生的姓名,Sdept AS 所在系

FROM student

WHERE Sno IN(SELECT Sno FROM SC WHERE Cno='C01')

--(2) 查询数学系成绩80分以上的学生的学号、姓名。

SELECT Sno AS 数学系成绩80分以上的学生的学号,Sname AS 姓名

FROM student

WHERE Sno IN(SELECT Sno FROM SC WHERE Grade>80)

AND Sno IN(SELECT Sno FROM student WHERE Sdept='数学系')

--(3) 查询计算机系学生所选的课程名

SELECT Cname AS 计算机系学生所选的课程名

FROM course

WHERE

courseCno IN(SELECT DISTINCT Cno FROM SC WHERE SCSno IN(SELECT Sno FROM student WHERE Sdept='计算机系'))

--25将计算机系成绩高于80分的学生的修课情况插入到另一张表中,分两种情况实现:///////////////

--(1) 在插入数据过程中建表。

--使用SELECT INTO插入数据的方法,是在插入数据的过程中建立新表

SELECT studentSname AS 学生名字,courseCname AS 选修课程,SCCno AS 课程编号

INTO [SC_Info1]--将计算机系成绩高于80分的学生的修课情况插入到表SC_Info1中

FROM student,course,SC

WHERE studentSdept='计算机系' AND SCGrade>80 AND courseCno=SCCno AND studentSno=SCSno

--(2) 先建一个新表,然后再插入数据。

--创建表SC_Info2

CREATE TABLE SC_Info2

(

Sname char(7),

Cname char(20),

Cno char(10)

)

--往表SC_info2插入查询得到的结果

INSERT SC_Info2

SELECT studentSname AS 学生名字,courseCname AS 选修课程,SCCno AS 课程编号

FROM student,course,SC

WHERE studentSdept='计算机系' AND SCGrade>80 AND courseCno=SCCno AND studentSno=SCSno

--26删除修课成绩小于50分的学生的修课记录

DELETE SC WHERE Grade<50 OR Grade IS NULL

--27将所有选修了"c01"课程的学生的成绩加10分。

UPDATE SC

SET Grade=Grade+10

WHERE Cno='C01'

以上就是关于SQL数据库填空题 求大神全部的内容,包括:SQL数据库填空题 求大神、SQL的查询 考试题目求教 题目已写答案求判断!、我在做一个在线考试系统,用的C#,Winform,题目都是单选题,怎么设计考题数据库表比较好SQL数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10150918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存