禅道的服务器启动
navicat 远程连接数据库
修改配置文件
到禅道Linux一键安装包 /opt/zbox/etc/mysql/my.cnf 把 bind-address= 127.0.0.1,注释掉。
(如果没有这条记录,就不用管了,直接跳过。)
vi /opt/zbox/etc/mysql/my.cnf
添加远程登录用户
执行添加用户命令,需要运行/opt/zbox/auth/adduser.sh来添加用户
/opt/zbox/auth/adduser.sh
根据提示输入用户名: fanmao
输入密码: fanmao666
在网页中输入 http://自己ip/adminer
输入对应的用户名 fanmao
密码 fanmao666
登录成功
输入对应的服务器信息
服务器: localhost:3306
用户名: root
密码:123456
点击登录
创建数据库远程登录用户权限
点击 【SQL 命令】 进入到执行SQL 界面。
运行命令
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
创建一个 用户名为 root 密码为123456 的账号,账号拥有远程登录的权限。
- grant all privileges 赋予所有的权限
- on .从任意地方可以进行登录
- ‘root’@’%’使用root账号操作所有的数据库
- identified by ‘123456’ 设置root的账号密码为123456;
flush privileges;
刷新权限生效。
重启禅道服务
/opt/zbox/zbox restart
navicat 远程连接数据库
输入自己的服务器信息
创建数据库
右键 — 【新建数据库】
输入数据库名, 选择对应的字符集和排序规则。
作业
创建对应的表
CREATE TABLE `students` (
`scode` int(10) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
`graduate` varchar(255) DEFAULT NULL,
PRIMARY KEY (`scode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `Course` (
`Ccode` int(10) NOT NULL AUTO_INCREMENT,
`CName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Ccode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `selectiveCourse` (
`Sccode` int(10) NOT NULL AUTO_INCREMENT,
`Ccode` int(10) DEFAULT NULL,
`class` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Sccode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `scores` (
`Scode` int(10) NOT NULL,
`Ccode` int(10) DEFAULT NULL,
`Stime` datetime DEFAULT NULL,
`Result` decimal(10,2) DEFAULT NULL,
`ispass` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
对应的数据库
demo.sql
创建一个新的数据库
运行 sql文件
选择对应的sql文件路径,点击开始
作业答案
第2 题
题解
先找到对应的最大分数
-- 条件
-- 学生, 年级,科目, 分数
-- 根据条件, 需要从 选课表, 成绩表中入手。
-- 找到各年级 各科的 最大分数
select class,a.ccode,max(result) from scores as a
INNER JOIN selectiveCourse as b
ON a.scode=b.scode and a.ccode=b.ccode
GROUP BY class,a.ccode;
-- 根据对应的分数找到对应的人员。
- 根据分数找对应的学生。
- 先把四张表关联在一起。 ```sql — 根据对应的分数找到对应的人员。
— 结果中 学生学号,姓名,年级,科目,分数
— 表 成绩表,学生表,科目,选课表
SELECT a.scode,a.Name
,b.class,c.Ccode, c.CName,d.Result FROM students as a
INNER JOIN selectiveCourse as b
ON a.scode = b.Scode
INNER JOIN Course as c
ON c.Ccode = b.Ccode
INNER JOIN scores as d
ON d.Scode = a.scode AND d.Ccode=c.Ccode
![image.png](https://cdn.nlark.com/yuque/0/2022/png/87080/1647054331643-7c7c9ec0-63e8-4039-8341-78cf5ccfbcc7.png#clientId=ub37b14e5-517b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=212&id=u65686266&margin=%5Bobject%20Object%5D&name=image.png&originHeight=265&originWidth=518&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16764&status=done&style=none&taskId=u8a9e6e5c-70f7-4e90-b2a6-cb76b18c7c8&title=&width=414.4)<br />有这样的结果, 跟第一步的分数结果进行关联<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/87080/1647054356654-f1c75082-13fe-4134-8226-500ccdbc74ed.png#clientId=ub37b14e5-517b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=173&id=ucb26f496&margin=%5Bobject%20Object%5D&name=image.png&originHeight=216&originWidth=316&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6776&status=done&style=none&taskId=u787fd9e6-98f4-4920-95d5-0c0310c3c6a&title=&width=252.8)<br />将这两个结果临时表,进行条件查询。
```sql
SELECT tmp1.class,tmp2.name, scode,cname,Result FROM
(
select b.class ,a.ccode,max(result) as 最高成绩 from scores as a
INNER JOIN selectiveCourse as b
ON a.scode=b.scode and a.ccode=b.ccode
GROUP BY b.class,a.ccode
)
as tmp1
INNER JOIN
(
SELECT a.scode as Scode,a.`Name` as name ,b.class as class,c.Ccode as Ccode, c.CName as cname,d.Result as Result FROM students as a
INNER JOIN selectiveCourse as b
ON a.scode = b.Scode
INNER JOIN Course as c
ON c.Ccode = b.Ccode
INNER JOIN scores as d
ON d.Scode = a.scode AND d.Ccode=c.Ccode
)
as tmp2
ON tmp1.class = tmp2.class AND tmp1.Ccode = tmp2.Ccode AND tmp1.最高成绩=tmp2.Result