为了账号安全,请及时绑定邮箱和手机立即绑定

[SQL]常见数据库上机考试题

标签:
MySQL

student表:

字段名描述数据类型约束
sno学号12个字符宽主键
sname姓名10个字符宽
sex性别2个字符宽
age年龄整型
address住址50个字符宽
classno班级号5个字符宽

course表:

字段名描述数据类型约束
cno课程号10个字符宽主键
cname课程名20个字符宽
lecture学时整型
credit学分整型

sc表:

字段名描述数据类型约束
sno学号10个字符宽主键
cno课程号20个字符宽主键
score成绩整型

class表:

字段名描述数据类型约束
classno班级号5个字符宽主键
classname班级名称20个字符宽
monitor班长姓名10个字符宽

创建以上表结构:

/*数据表的创建*/USE HNIST
GO

--①创建student表
CREATE TABLE student
(
--sno   学号  12个字符宽  主键
sno char(12) primary key,

--sname 姓名  10个字符宽  
sname char(10),

--sex   性别  2个字符宽
sex char(2),

--age   年龄  整型
age int,
    
--address   住址  50个字符宽  
address char(50),

--classno   班级号 5个字符宽   
classno char(5)

)
GO


--②创建course表
CREATE TABLE course
(
--cno   课程号 10个字符宽  主键
cno char(10) primary key,

--cname 课程名 20个字符宽  
cname char(20),

--lecture   学时  整型  
lecture int,

--credit    学分  整型
credit int, 

)
GO

--③创建sc表
CREATE TABLE sc
(

--sno   学号  10个字符宽  主键
sno char(10) not null,

--cno   课程号 20个字符宽  主键
cno char(20) not null,

--score 成绩  整型
score int,

primary key(sno,cno)    
)
GO

--④创建class表
CREATE TABLE class(

--classno   班级号 5个字符宽   主键
classno char(5) primary key,

--classname 班级名称    20个字符宽  
classname char(20),

--monitor   班长姓名    10个字符宽  
monitor char(10)


--foreign key(dno) REFERENCES Dept_info(dno)
)
GO

注意题目答案都是我自己整理和编写的SQL语句若有瑕疵请私信指出,感激不尽

题目:

1、给sc表创建一个check约束,设置成绩在0-150分之间。给sc表的sno字段创建一个外键约束。

USE HNISTGOALTER TABLE scADD CONSTRAINT con CHECK(sc.score>0 and sc.score<150)

2、查询选修了课程号为”002”的课程且该课程成绩高于L.Toni的学生的学号和成绩。

--思路:先成绩->再学号->然后姓名

USE HNIST
GO

SELECT sno,score
FROM sc
WHERE cno='002' and score > 
(
        select score        from sc 
        where cno='2' and sno=(
            select sno            from student 
            where sname = 'L.Toni'
        )
);
go

3、查询和B选修的课程号为”006”的课程分数相同的学生学号和姓名。

--思路:嵌套的思维,按题目顺序从前到后(正常是从后到前),先通过名字和课程号找到成绩再套一层select找相同成绩,由于相同成绩不止一个所以给到的是in

USE HNIST

SELECT sc.sno,sname
FROM sc,student
WHERE  sc.sno = student.sno and cno = '006' and score in (
    select score    from sc,student
    where sname = 'B' and cno = '006')

4、查询没有选修课程号为”009”的课程的学生学号和姓名。

思路:在课程号009内没有这位学生的

SELECT sno,sname
FROM student
WHERE sno not in (
    SELECT sno
    FROM SC
    WHERE cno = '009')

5.查询年龄大于女同学平均年龄的男同学的姓名和年龄。

USE HNIST
GO

SELECT sname,age
FROM student
WHERE sex = '男' and age >
(
    SELECT avg(age)
    FROM student
    WHERE sex = '女')

6、统计各门课程的平均成绩,要求输出课程号、课程名称和平均成绩。

SELECT classno,classname,AVG(score)
FROM class,sc
GROUP BY classno,classname

7、查询选修了”云计算”课程且成绩为90分以上的学生的学号与成绩。

--思路:sc表用于连接student和class表,使值不重复

USE HNIST
GO
SELECT student.sno,scorefrom student,sc,classwhere student.sno = sc.sno and class.classno = SC.cno and  class.classname='云计算' and  score>90go

8、查询选修了课程号为”001”的课程且成绩在80-90之间的学生的学号、姓名和成绩,并将成绩乘以系数0.85输出。

USE HNIST
GO
SELECT student.sno,sname,score*0.8 as 'score'FROM SC,student
WHERE cno = '001' and score between 80 and 90;

9、创建一个存储过程,根据输入的学号显示学生的姓名、选修课程名、学分、学时和成绩。

USE HNIST
GO
CREATE PROCEDURE pr4 @number char(12)
as
select sname,classname,credit,lecture,score
from student join course  on student.classno = course.cno  and sno = @number ,class,scGO
--执行:exec pr4 '传入一个值'

10、创建一个视图,显示各个学生的学号、姓名、家庭住址、选修课程号、选修课程名、学分和学时。

USE HNIST 
GO
CREATE VIEW v
as
select student.sno,sname,address,class.classno,cname,credit,lecturefrom student,sc,class,course

11.查询B选修的课程中成绩最高的课程号和成绩。

USE HNIST
GO
SELECT cno,score
FROM SC
WHERE score = (    SELECT MAX(score)
    FROM SC
    WHERE sno = (
        SELECT sno
        FROM student
        WHERE sname = 'B'
    )
)

12.查询选修了“大数据分析”课程且成绩超过该课程平均成绩的学生的学号和成绩。

--思路:依靠属性连接表,再进行筛选

USE HNIST
GO
SELECT sc.sno,score
FROM sc,student,classwhere sc.sno = student.sno and sc.cno = class.classno and classname = '大数据分析' and score>(                                                                        select avg(score)
                                                                        from sc
                                                                        where classname = '大数据分析')

13.查询选修了“大数据分析”课程的学生学号和成绩,按成绩降序排列,成绩相同则按学号升序排列。

USE HNIST
GO

SELECT sno,score
FROM sc,classWHERE sc.cno = class.classno and classname = '大数据分析'order by score asc,cno desc

14.查询”006”号课程成绩最高的学生学号、姓名和成绩。

USE HNIST
GO
SELECT sno,score
FROM scwhere score = (
    select max(score)
    from sc    where cno = '006')

15.查询选修了学分为3分的课程的学生学号、姓名、课程名和成绩。

--思路:值对应

USE HNIST
GO
select student.sno,sname,classname,scorefrom course,student,class,scwhere course.cno = sc.cno and sc.cno = class.classno and sc.sno = student.sno and credit = '3'

16.创建存储过程,根据输入的课程名显示选修该课程的男学生的姓名、年龄和成绩。

--注意不要把存储过程命名为proc!

USE HNIST
go
create procedure pro @name char(10)
as 
select sname,age,score
from sc,student
where sc.sno = student.sno and classno = (
                            select classno
                            from class
                            where classname = @name)
--执行:exec pro '传入一个值'



作者:Topus
链接:https://www.jianshu.com/p/427168fc0e65


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
205
获赞与收藏
1007

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消