Mysql 试题

本文详细介绍了如何设计并操作一个简易的课程管理系统,包括创建数据库表、数据插入与查询功能,以及完成基本的更新操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一个简易的课程管理系统,并完成简单操作。要求如下:
1. 为系统建立 三张表(table)
table1: 表名:student . 字段: 学号(sno),姓名(sname)                         (sno 为主键,ID从1开始自增)
table2: 表名:class .   字段: 课程编号(cno),课程名称(cname),教师(cteacher) (cno 为主键,ID从1开始自增)

table3: 表名:grade .   字段: 学号(sno),课程编号(cno),成绩(scgrade)        (sno和cno为联合主键, 并给scgrade字段加上索引)


DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cno` int(11) NOT NULL auto_increment,
  `cname` varchar(255) default NULL,
  `cteacher` varchar(255) default NULL,
  PRIMARY KEY  (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


#
# Dumping data for table class
#




#
# Source for table grade
#


DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
  `sno` int(11) NOT NULL,
  `cno` int(11) NOT NULL,
  `scgrade` float default '0',
  PRIMARY KEY  (`sno`,`cno`),
  KEY `i_grade` (`scgrade`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


#
# Dumping data for table grade
#




#
# Source for table student
#


DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sno` int(11) NOT NULL auto_increment,
  `sname` varchar(255) default NULL,
  PRIMARY KEY  (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


2. 给表student和class各插入5条数据(其中表class中有个老师名叫“黄欢”),给表grade插入20条数据  
3. 完成以下查询功能 
1).找出学号为5的学生姓名
2).找出没有报“黄欢”老师的课程的学生姓名。
3).找出学过“1”,“2”号课程的所有学生姓名。
4).找出2号课程及格的所有学生姓名 (60分及格,满分100分)
5).算出2号课程的平均成绩
5).找出1号课程成绩高于2号课程成绩的学生姓名。
4. 完成以下更新
1).学号为5的学生更改名字为‘apple’
2).给2号课程不及格的成绩加20分
3).删除3号课程不及格的成绩记录






此外,推荐一本经典的 php和mysql的web开发书籍:
<<PHP和MySQL WEB开发>>  Luke Welling & Laura Thomson
        
### MySQL 练习题汇总 以下是与 MySQL 相关的一些常见练习题及其解答: #### 题目一:查询选修了课程编号为 `course_id=2` 的学生 ID 列表 可以通过子查询实现此功能。具体 SQL 如下所示: ```sql SELECT student_id FROM score WHERE course_id = 2; ``` 上述语句通过条件过滤获取指定课程的学生列表[^1]。 --- #### 题目二:查询学过“大牛”老师所教授的全部课程的同学姓名 该题目涉及多张表之间的关联操作,需利用嵌套子查询完成逻辑筛选。SQL 实现如下: ```sql SELECT student.name FROM score INNER JOIN student ON score.student_id = student.id WHERE score.course_id IN ( SELECT course.id FROM course INNER JOIN teacher ON course.teacher_id = teacher.id WHERE teacher.name = '大牛' ) GROUP BY score.student_id; ``` 这里的关键在于使用 `IN` 子句匹配教师授课情况,并结合分组函数确保每位同学满足条件[^2]。 --- #### 题目三:计算两位日期间的年份差异 MySQL 提供内置函数 `TIMESTAMPDIFF()` 来处理时间间隔运算。例如求解入职时间和当前时刻相差多少整年数可写成: ```sql SELECT TIMESTAMPDIFF(YEAR, hiredate, NOW()) AS years_diff FROM employees; ``` 其中参数依次代表单位类型(此处设为 YEAR)、起始日期以及终止日期[^3]。 --- #### 题目四:展示全体员工对应的部门名与其薪资水平 这是典型的跨表联结案例之一,借助标准连接语法即可达成目标。示范代码片段如下: ```sql SELECT e.ename, d.dname, e.sal FROM emp e JOIN dept d ON e.deptno = d.deptno; ``` 以上脚本将雇员基本信息同其所属机构信息相融合呈现出来。 --- ### 注意事项 对于复杂查询建议先理清业务需求再逐步构建表达式结构;同时注意字段命名冲突规避问题以免影响最终结果准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值