boxmoe_header_banner_img

欢迎来到我的博客

加载中

加载中动画图标 0%

加载中...

文章导读

实验4 子查询


avatar
菰 远 2025-09-28 37

老师的网站:47.107.46.163

相关软件下载地址

这个实验是使用ol83_vm15-16_GY环境下做的
下载ol83_vm15-16_GY.7z实在太慢可以找我拿U盘拷贝
下载地址:

星辰云盘:数据库相关软件包括虚拟机等
123网盘:数据库相关软件包括虚拟机等
百度网盘:数据库相关软件包括虚拟机等
huang1111:数据库相关软件包括虚拟机等
小飞机网盘:数据库相关软件包括虚拟机等
115网盘:数据库相关软件包括虚拟机等
send:数据库相关软件包括虚拟机等
VMware 17.5:VMware Workstation Pro 17.5.1 build-23298084 软件安装包
SecureCRT 8.5.1.3:SecureCRT 8.5.1.3 中文破解版

系统账号密码都是root
数据库的账号为root 密码为123456
这个虚拟机内已经有一个快照了要是配置错误可以直接恢复快照,平常也可以把整个虚拟机文件夹ol83_vm15-16_GY丢自己U盘,这样就不用每次都要下载了

实验环境准备

这个实验是使用ol83_vm15-16_GY环境下做的
下载ol83_vm15-16_GY.7z实在太慢可以找我拿U盘拷贝

#这个命令是启动mysql,虚拟机第一次启动或者重新启动都需要输入一次
cd /usr/local/mysql
bin/mysqld_safe --user=mysql &
#输入之后ctrl+c退出
mysql -u root -p
#如果输出 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) 那就是没有启动mysql,相关命令在《实验环境准备》都有放着
#密码在上面已经写的清清楚楚了
USE dbXXX;
#这个命令表示连接dbxxx数据库,每次进入数据库都要连接一次,不然会提示没有数据库
#XXX为你自己名字的首字母注意!!!!!!

要是输出 ERROR 1049 (42000): Unknown database ‘dbXXX’ 那就是没有这个数据库需要创建数据库输入这个(CREATE DATABASE dbXXX;)再试试就可以了
以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

DROP TABLE report, course, stu;
create table stu
(
sno int primary key,
sname varchar(12)
);
create table course
(
cno int primary key,
cname varchar(20)
);
create table report 
(
sno int references stu(sno),
cno int references course(cno),
grade int,
primary key(sno,cno)
);
insert into stu values(202101,'John');
insert into stu values(202102,'Mike');
insert into stu values(202103,'Tom');
insert into stu values(202104,'Smith');
insert into course values(1001,'English');
insert into course values(1002,'Maths');
insert into course values(1003,'Computer');
insert into course values(1004,'Game');
insert into report values(202101,'1001',60);
insert into report values(202102,'1001',70);
insert into report values(202102,'1002',80);
insert into report values(202102,'1003',90);
insert into report values(202103,'1001',90);
insert into report values(202103,'1002',50);
insert into report values(202104,'1004',55);

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

1. 查询哪门课没有学生选,给出课程名称

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT cname 
FROM course 
WHERE cno NOT IN (SELECT DISTINCT cno FROM report); 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出Empty set (0.00 sec)是正确的,因为没有符合要求的数据
截图从– XXX到输出Empty set (0.00 sec)为止的全部

2. 查询哪个学生没有选课,给出学生名称

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT sname 
FROM stu 
WHERE sno NOT IN (SELECT DISTINCT sno FROM report); 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出Empty set (0.00 sec)是正确的,因为没有符合要求的数据
截图从– XXX到输出Empty set (0.00 sec)为止的全部

3. 查询哪门课选修人数不到3个,给出课程名称及选课人数

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT c.cname, COUNT(r.sno) AS 选课人数 
FROM course c 
LEFT JOIN report r ON c.cno = r.cno 
GROUP BY c.cno, c.cname 
HAVING COUNT(r.sno) < 3; 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出3 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出3 rows in set (0.00 sec)为止的全部

4. 查询Mike选的所有课程名称及分数

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT c.cname, r.grade 
FROM report r 
JOIN course c ON r.cno = c.cno 
JOIN stu s ON r.sno = s.sno 
WHERE s.sname = 'Mike'; 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出3 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出3 rows in set (0.00 sec)为止的全部

5. 查询每个学生的名称、其所选课程名称及所选课程分数

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT s.sname, c.cname, r.grade 
FROM stu s 
LEFT JOIN report r ON s.sno = r.sno 
LEFT JOIN course c ON r.cno = c.cno; 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出7 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出7 rows in set (0.00 sec)为止的全部

6. 查询选English课程的学生名称

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT s.sname 
FROM stu s 
WHERE s.sno IN (SELECT r.sno FROM report r 
                JOIN course c ON r.cno = c.cno 
                WHERE c.cname = 'English'); 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出3 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出3 rows in set (0.00 sec)为止的全部

7. 查询选English课程的学生中,哪个学生的English课程分数最高,要求查出学生名称及其English分数

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT s.sname, r.grade 
FROM stu s 
JOIN report r ON s.sno = r.sno 
JOIN course c ON r.cno = c.cno 
WHERE c.cname = 'English' 
AND r.grade = (SELECT MAX(grade) FROM report r2 
               JOIN course c2 ON r2.cno = c2.cno 
               WHERE c2.cname = 'English'); 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出1 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出1 rows in set (0.00 sec)为止的全部

8. 查询选课最多的学生的名称

-- XXX
#XXX为你名字首字母!!! --(有空格)XXX!!!

以下的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

SELECT s.sname 
FROM stu s 
JOIN report r ON s.sno = r.sno 
GROUP BY s.sno, s.sname 
HAVING COUNT(r.cno) = (SELECT MAX(course_count) 
                        FROM (SELECT COUNT(cno) AS course_count 
                              FROM report 
                              GROUP BY sno) AS counts); 

以上的代码可以直接代码框的右上角点击复制代码,我是在Crt 8.5.1.3(不是课室的版本)操作的,Mobaxterm的没有测试过,不过看别人也可以正常复制粘贴

输出1 rows in set (0.00 sec)是正确的,因为有符合要求的数据
截图从– XXX到输出1 rows in set (0.00 sec)为止的全部

感谢您的支持
微信赞赏

微信扫一扫

支付宝赞赏

支付宝扫一扫



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码
GuYuan-V-个人博客
🎉 我的生日

日期:09月29日

--