作业7
大约 10 分钟
作业7
1.基本sql查询语句
基本sql查询语句

CREATE TABLE student (
id INT, -- 编号
name VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO
student (id,name,age,sex,address,math,english)
VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
-- 查询 math 分数大于 80 分的学生
-- 查询 english 分数小于或等于 80 分的学生
-- 查询 age 等于 20 岁的学生
-- 查询 age 不等于 20 岁的学生
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
-- 查询 id 是 1 或 3 或 5 的学生
-- 查询 english 成绩大于等于 75,且小于等于 90 的学生
-- 查询姓马的学生
-- 查询姓名中包含'德'字的学生
2.经典sql查询语句
前言
-- 经典SQL练习题
CREATE TABLE student
(
sno VARCHAR(3) NOT NULL, -- 编号
sname VARCHAR(4) NOT NULL, -- 姓名
ssex VARCHAR(2) NOT NULL, -- 性别
sbirthday DATETIME, -- 生日
class VARCHAR(5) -- 班级
);
CREATE TABLE course
(
cno VARCHAR(5) NOT NULL, -- 课程编号
cname VARCHAR(10) NOT NULL,-- 课程名
tno VARCHAR(10) NOT NULL -- 老师编号
);
CREATE TABLE score
(
sno VARCHAR(3) NOT NULL, -- 学生编号
cno VARCHAR(5) NOT NULL,-- 课程编号
degree NUMERIC(10, 1) NOT NULL -- 成绩
);
CREATE TABLE teacher
(
tno VARCHAR(3) NOT NULL, -- 老师编号
tname VARCHAR(4) NOT NULL, -- 名称
tsex VARCHAR(2) NOT NULL, -- 性别
tbirthday DATETIME NOT NULL, -- 生日
prof VARCHAR(6), -- 职位
depart VARCHAR(10) NOT NULL -- 系部
);
INSERT INTO student(sno, sname, ssex, sbirthday, class)
VALUES (108, '曾华', '男', '1977-09-01', 95033);
INSERT INTO student(sno, sname, ssex, sbirthday, class)
VALUES (105, '匡明', '男', '1975-10-02', 95031);
INSERT INTO student(sno, sname, ssex, sbirthday, class)
VALUES (107, '王丽', '女', '1976-01-23', 95033);
INSERT INTO student(sno, sname, ssex, sbirthday, class)
VALUES (101, '李军', '男', '1976-02-20', 95033);
INSERT INTO student (sno, sname, ssex, sbirthday, class)
VALUES (109, '王芳', '女', '1975-02-10', 95031);
INSERT INTO student(sno, sname, ssex, sbirthday, class)
VALUES (103, '陆君', '男', '1974-06-03', 95031);
INSERT INTO course(cno, cname, tno)
VALUES ('3-105', '计算机导论', 825);
INSERT INTO course(cno, cname, tno)
VALUES ('3-245', '操作系统', 804);
INSERT INTO course(cno, cname, tno)
VALUES ('6-166', '数据电路', 856);
INSERT INTO course(cno, cname, tno)
VALUES ('9-888', '高等数学', 100);
INSERT INTO score(sno, cno, degree)
VALUES (103, '3-245', 86);
INSERT INTO score(sno, cno, degree)
VALUES (105, '3-245', 75);
INSERT INTO score(sno, cno, degree)
VALUES (109, '3-245', 68);
INSERT INTO score(sno, cno, degree)
VALUES (103, '3-105', 92);
INSERT INTO score(sno, cno, degree)
VALUES (105, '3-105', 88);
INSERT INTO score(sno, cno, degree)
VALUES (109, '3-105', 76);
INSERT INTO score(sno, cno, degree)
VALUES (101, '3-105', 64);
INSERT INTO score(sno, cno, degree)
VALUES (107, '3-105', 91);
INSERT INTO score(sno, cno, degree)
VALUES (108, '3-105', 78);
INSERT INTO score(sno, cno, degree)
VALUES (101, '6-166', 85);
INSERT INTO score(sno, cno, degree)
VALUES (107, '6-106', 79);
INSERT INTO score(sno, cno, degree)
VALUES (108, '6-166', 81);
INSERT INTO teacher(tno, tname, tsex, tbirthday, prof, depart)
VALUES (804, '李诚', '男', '1958-12-02', '副教授', '计算机系');
INSERT INTO teacher(tno, tname, tsex, tbirthday, prof, depart)
VALUES (856, '张旭', '男', '1969-03-12', '讲师', '电子工程系');
INSERT INTO teacher(tno, tname, tsex, tbirthday, prof, depart)
VALUES (825, '王萍', '女', '1972-05-05', '助教', '计算机系');
INSERT INTO teacher(tno, tname, tsex, tbirthday, prof, depart)
VALUES (831, '刘冰', '女', '1977-08-14', '助教', '电子工程系');
- 查询student表中的所有记录的sname,ssex和class列。
- 查询教师所有的单位即不重复的depart列。
- 查询student表的所有记录。
- 查询score表中成绩在60到80之间的所有记录。
- 查询score表中成绩为85,86或88的记录。
- 查询student表中“95031”班或性别为“女”的同学记录。
- 以class降序查询student表的所有记录。
- 以cno升序、degree降序查询score表的所有记录。
- 查询”95031”班的学生人数。 ========以上是单表题目
- 查询Score表中的最高分的学生学号和课程号。
- 查询“3-105”号课程的平均分。
- 查询score表中至少有5名学生选修的并以3开头的课程的平均分数。
- 查询最低分大于70,最高分小于90的Sno列。
- 查询所有学生的sname、cno和degree列。
- 查询所有学生的sno、cname和degree列。
- 查询所有学生的sname、cname和degree列。
- 查询“95033″班所选课程的平均分。
- 假设使用如下命令建立了一个grade表:
create table grade(
low decimal(3,0), -- 最低值
upp int(3), -- 最高值
rankk varchar(1) -- 等级
);
insert into grade values(90,100,'A');
insert into grade values(80,89,'B');
insert into grade values(70,79,'C');
insert into grade values(60,69,'D');
insert into grade values(0,59,'E');

- 查询选修“3-105″课程的成绩高于“109″号同学成绩的所有同学的记录。
- 查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
- 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
- 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
- 查询“张旭“教师任课的学生成绩。
- 查询选修某课程的同学人数多于5人的教师姓名。
- 查询95O33班和95031班全体学生的记录。
- 查询存在有85分以上成绩的课程Cno.
- 查询出“计算机系“教师所教课程的成绩表。
- 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
- 查询选修编号为”3-105“课程且成绩至少高于选修编号为”3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
- 查询选修编号为“3-105”且成绩高于选修编号为“3-245″课程的同学的Cno、Sno和Degree。
- 查询所有教师和同学的name、sex和birthday。
- 查询所有“女”教师和“女”同学的name、sex和birthday。
- 查询成绩比该课程平均成绩低的同学的成绩表。
- 查询所有任课教师的Tname和Depart。
- 查询所有未讲课的教师的Tname和Depart。
- 查询至少有2名男生的班号。
- 查询Student表中不姓””王”的同学记录。
- 查询Student表中每个学生的姓名和年龄。
- 查询Student表中年龄最大和最小学生的Sbirthday日期值。
- 以班号和年龄从大到小的顺序查询Student表中的全部记录。
- 查询“男”教师及其所上的课程。
- 查询最高分同学的Sno、Cno和Degree列。
- 查询和“李军”同性别的所有同学的Sname。
- 查询和“李军”同性别并同班的同学Sname。
- 查询所有选修“计算机导论”课程的“男”同学的成绩表。
当天必须完成
3.数据库多表设计题数据库多表设计题
根据下列需求,完成表关系设计,无需物理外键和数据
题目: 餐厅菜单管理
设计数据库模型来管理餐厅的菜单。数据库中应包括以下表和关系:
- 餐厅表(Restaurants):包含餐厅的信息,如名称、地址等。
- 菜单表(Menus):每个餐厅可以有多个菜单。
- 菜品表(Dishes):每个菜单包含多个菜品。
- 订单表(Orders):记录顾客下的订单,与餐厅和菜品建立关系。
题目:顾客订餐管理
设计数据库模型来管理顾客的订餐信息。数据库中应包括以下表和关系:
- 顾客表(Customers):包含顾客的信息,如姓名、联系方式等。
- 订单表(Orders):记录顾客下的订单。
- 菜品表(Dishes):包含可供选择的菜品。
- 菜品订单关系表(DishOrderRelations):记录每个订单中包含的菜品。
题目: 学校课程管理
设计数据库模型来管理学校的课程和学生。数据库中应包括以下表和关系:
- 学生表(Students):包含学生的信息,如姓名、学号等。
- 课程表(Courses):包含学校提供的课程信息。
- 选课表(Enrollments):学生可以选择多门课程,该表记录了学生的选课信息。
题目: 物流运单管理
设计数据库模型来管理物流公司的运单和车辆。数据库中应包括以下表和关系:
- 运单表(Waybills):包含每个运单的信息,如货物、起始地、目的地等。
- 车辆表(Vehicles):包含公司的所有车辆信息。
- 驾驶员表(Drivers):包含驾驶员的信息。
- 运单分配表(WaybillAssignments):记录每个运单分配给哪辆车和哪名驾驶员。
当天必须完成
4.数据库多表设计题小说APP
原则上多少张表取决于你自己的理解,言之有理即可,没有标准答案
现在要为一个阅读 app 设计部分后台数据库表,功能原型
1️⃣ (1) 我的书架 - 图1
- 只需考虑书架这个页面可见部分(浏览历史、圈子和下面的书城、分类、福 利,我的都不用考虑)
- 整本书有个阅读进度(最近一次阅读的章节)

2️⃣ (2) 书籍详情 - 图2
只需要考虑详情和目录两部分(笔记不考虑)
- 目录中列出了书的所有章节
- 金庸和梁羽生的两本书都说有多少多少册,这个不考虑,权且认为每本书 分成多个章节即可 注意:每一章节都有各自的阅读进度(显示的是读过段落和本章总段落的百分比)
3️⃣ 3)阅读 - 图3
可以看到每一章节分成若干段落,根据段落确定阅读进度

4️⃣ (4) 想法 - 图4
- 以段落为单位可以进行评论(称为想法),点击每个段落最后的按钮后进入此段落的想法
- 想法可以有多条,每个想法均可以被点赞(不必考虑转发)

