答案在最后,写完记得核对哦!
一、选择题(共20分,每小题2分)
1.主键可以由表中的( )个字段组成(选一项)
A、一 B、二 C、三 D、任意多个
2.ORDER BY 的作用是( )(选一项)
A、查询输出分组 B、设置查询条件
C、对记录排序 D、限制查询返回的数据行
3.表book中包含三个字段:title(varchar), author(varchar), price(float)。
Author的默认值是’UNKNOW’,执行SQL语句:insert book (title,price) values (jsp', 50)。以下结果正确的是( )(选一项)
A、插入失败,SQL语句有错 B、插入成功,author列的数据是UNKNOW
C、插入成功,author列的数据是NULL D、插入成功,author列的数据是50
4.成绩表grade中字段score代表分数,以下( )语句返回成绩表中的最低分。(选两项)
A、select max(score) from grade
B、select top 1 score from grade order by score asc
C、Select min(score) from grade
D、select top 1 score from grade order by score desc
5.关系型数据库中,要防止小于100的数保存到int类型的列可以( )(选一项)
A、使用主键约束 B、使用缺省约束
C、使用外键约束 D、使用检查约束
6.关于主键,以下( )说法是正确的。(选一项)
A、主键可以用来确保表中不存在重复的数据行。
B、一个表必须有一个主键。
C、主键列可以为null。
D、只能对整数型列设置主键。
7.假设两张表建立了“主键—外键”的引用关系,则主表(主键)中对应(外键)的数据( )(选一项)
A、必须在子表中有对应 B、可以比主表的数据多
C、主表的数据行可以比子表的数据行少 D、必须为数字数据类型
8.若要删除book表中所有数据,以下语句正确的是( )(选一项)
A、truncate table book B、delete * from book
C、drop table book D、delete table book
9.定义数据表时,若要求某一列的值是唯一的,则应在定义的时候使用( )(选一项)
A、NULL B、NOT NULL C、DISTINCT D、UNIQUE
10.学生成绩表grade中有字段score(float),现在要把所有在55分至60(包含两个边界值)之间的分数提高5分,以下SQL语句正确的是(选2项)
A、Update grade set score=score+5
B、Update grade set score=score+5 where score>=55 or score <=60
C、Update grade set score=score+5 where score between 55 and 60
D、Update grade set score=score+5 where score <=55 and score >=60
二、填空题(共10分,每空1分)
三、代码题(共70分)
表结构分别如下:
学生信息表(StuInfo)
字段名 |
说明 |
类型 |
长度 |
可否为空 |
约束 |
SNO |
学生编号 |
nvarchar |
20 |
否 |
主键约束 |
SName |
学生姓名 |
nvarchar |
20 |
否 |
|
SAge |
学生年龄 |
Int |
否 |
Check约束,年龄在15-25岁之间 |
|
STime |
入学时间 |
Date |
|||
TNO |
小组编号 |
nvarchar |
20 |
||
SNative |
学生籍贯 |
nvarchar |
20 |
默认约束:湖北 |
学生成绩表(ScoreInfo)
字段名 |
说明 |
类型 |
长度 |
可否为空 |
约束 |
ScNO |
成绩编号 |
nvarchar |
20 |
否 |
主键约束 |
SNO |
学生编号 |
nvarchar |
20 |
否 |
外键:参照学生信息表主键SNO |
SScore |
学生成绩 |
Decimal(10,2) |
学生表(StuInfo)
学生编号 姓名 年龄 入学时间 小组编号 籍贯
s1001 张三 16 2020-09-03 1001 湖北
s1002 李四 19 2019-09-01 1002 河南
s1003 王五 20 2021-09-04 1001 湖北
s1004 赵六 19 2020-09-01 1002 新疆
s1005 陈七 18 2021-09-03 1001 湖北
成绩表(ScoreInfo)
成绩编号 学生编号 学生成绩
sc1001 s1001 76.5
sc1002 s1002 81
sc1003 s1003 57
sc1004 s1004 85
sc1005 s1005 77
-- -- 一、选择题
-- 1.D 2. C 3. B 4. BC 5. D 6. A 7. A 8. A 9. D 10.BC
-- -- 二、填空题
-- 3.asc ,desc
-- 4. DISTINCT
-- 5.主键约束,外键约束,唯一约束
-- 6.%,_,
-- 7.SUM() ,AVG()
-- 创建数据库StuManager
-- 1,删除数据库
DROP DATABASE IF EXISTS StuManager;
-- 2,创建数据库
CREATE DATABASE StuManager;
-- 3,修改数据库编码方式和字符集排列顺序
ALTER DATABASE StuManager CHARACTER SET utf8 COLLATE utf8_bin;
-- 4,使用数据库
USE StuManager;
-- 9. 建立两张表,StuInfo(学生信息表),ScoreInfo(学生成绩表)
-- 表结构分别如下:
-- 学生信息表(StuInfo)
DROP TABLE IF EXISTS StuInfo;
CREATE TABLE StuInfo(
SNO NVARCHAR(20) NOT NULL PRIMARY KEY, -- 学生编号
SName NVARCHAR(20) NOT NULL, -- 学生姓名
SAge INT NOT NULL CHECK (SAge BETWEEN 15 AND 25), -- 学生年龄
STime DATE, -- 入学时间
TNO NVARCHAR(20), -- 小组编号
SNative NVARCHAR(20) DEFAULT '湖北' -- 学生籍贯
);
-- 学生成绩表(ScoreInfo)
DROP TABLE IF EXISTS ScoreInfo;
CREATE TABLE ScoreInfo(
ScNO NVARCHAR(20) NOT NULL PRIMARY KEY, -- 成绩编号
SNO NVARCHAR(20) NOT NULL, -- 学生编号
SScore DECIMAL(10,2), -- 学生成绩
FOREIGN KEY (SNO) REFERENCES StuInfo(SNO)
);
-- 10. 使用插入语句为两张表添加如下数据
SELECT * FROM StuInfo;
SELECT * FROM ScoreInfo;
-- 学生表(StuInfo)
INSERT INTO StuInfo(SNO, SName, SAge, STime, TNO, SNative)VALUES
('s1001', '张三', 16, '2020-09-03', '1001', '湖北'),
('s1002', '李四', 19, '2019-09-01', '1002', '河南'),
('s1003', '王五', 20, '2021-09-04', '1001', '湖北'),
('s1004', '赵六', 19, '2020-09-01', '1002', '新疆'),
('s1005', '陈七', 18, '2021-09-03', '1001', '湖北');
-- 成绩表(ScoreInfo)
INSERT INTO ScoreInfo(ScNO, SNO, SScore)VALUES
('sc1001', 's1001', 76.5),
('sc1002', 's1002', 81),
('sc1003', 's1003', 57),
('sc1004', 's1004', 85),
('sc1005', 's1005', 77);
-- 11. 显示成绩排行前3的成绩信息,要求使用别名显示列名(10分)
SELECT s.SNO AS '学号',s.SName AS '姓名',s.SAge AS '年龄',sc.SScore AS '考试成绩'
FROM StuInfo s,ScoreInfo sc
WHERE s.SNO = sc.SNO
ORDER BY sc.SScore DESC
LIMIT 3;
-- 12. 查询2021年以前入学的学生信息及考试成绩(10分)
SELECT * FROM StuInfo JOIN ScoreInfo ON StuInfo.SNO = ScoreInfo.SNO WHERE STime < '2021-01-01';
-- 13. 按小组编号分类计算小组员工数、学生平均年龄,并显示小组平均年龄大于19岁的小组信息,要求使用别名显示列名(10分)
SELECT s.TNO AS '小组编号',COUNT(*) AS '小组学生人数',AVG(s.SAge) AS '小组学生平均年龄'
FROM StuInfo s
GROUP BY s.TNO
HAVING AVG(s.SAge) > 19;
-- 14. 查询成绩在80和90(包含80和90)之间的学生信息,要求列出学生编号、学生成绩、学生姓名、学生年龄、入学时间(10分)
SELECT StuInfo.SNO AS '学生编号',SName AS '学生姓名',SScore AS '学生成绩',SAge AS '学生年龄',STime AS '入学时间'
FROM StuInfo JOIN ScoreInfo ON StuInfo.SNO = ScoreInfo.SNO
WHERE SScore BETWEEN 80 AND 90;